11 czerwca 2009
Zapewne niektórzy użytkownicy Internet Explorera 8 zastanawiali się od czego zależy liczba procesów iexplore.exe.
IE8 używa funkcji Loosely Coupled IE (LCIE), w której IE działa używając kilku procesów połączonych w tzw. job. Widać to np. w Process Explorerze.
Taki job to grupa procesów, które mogą być razem zarządzane i mogą mieć przydzielone limity zasobów.
Domyślnie liczba procesów IE8 zależy od wielkości wolnej pamięci, liczby zakładek, powiązań między zakładkami oraz ilości sesji IE.
Tworzone są minimum dwa procesy iexplore.exe: jeden dla głównego okna, drugi dla zakładki. Wraz z otwieraniem zakładek ilość procesów może się potem zwiększyć.
Liczbą procesów można zarządzać za pomocą wartości TabProcGrowth typu DWORD lub tekstowego w kluczu HKCU\Software\Microsoft\Internet Explorer\Main.
Określa ona ile może maksymalnie działać procesów "zakładkowych". Jeśli ustawimy ją na 0, wówczas funkcja LCIE będzie wyłączona
i całe okno IE będzie działać w jednym procesie. Gdy będzie ustawiona na 1, procesy będą dwa: dla okna i zakładki. Przy ustawieniu
większej liczby liczba procesów "zakładkowych" będzie się zwiększała wraz z ilością zakładek ale nie przekroczy wartości wpisanej w rejestrze.
Zamiast wartości liczbowej można wpisać też wartość tekstową. Jeśli wpiszemy słowo small, utworzone zostanie maksymalnie
5 procesów zakładkowych a trzeci proces zostanie utworzony przy 15-ej zakładce. Gdy wpisane zostanie słowo medium,
IE8 działać będzie w maksymalnie 9 procesach zakładkowych a piąty proces zostanie uruchomiony przy 17-ej zakładce. Z kolei słowo
maximum ustawi limit na 16 procesów zakładkowych a dziewiąty proces zostanie uruchomiony przy 21-ej zakładce.
Opisane ustawienie w rejestrze przyda się szczególnie użytkownikom pluginu IE7Pro, który niestety nie jest dostosowany do IE8 i nie ładuje się na wszystkich zakładkach.
Ustawiając TabProcGrowth na 1 można sprawić, że IE7Pro będzie się ładowało zawsze poprawnie. Minusem będzie brak odporności na zawieszenie, którą dawało LCIE - zawieszenie jednej zakładki spowoduje zawieszenie całej przeglądarki.
7 czerwca 2009
Kolejny kod stworzony przy okazji pytania zadanego na grupach: jak automatycznie wydrukować wiele plików DOC?
Można w tym celu napisać proste makro dla MS Worda:
Sub PrintAllFirst()
Dim myFile As String
Dim strLooking As String
strLooking = "C:\Documents and Settings\Grzegorz\Pulpit\word\"
myFile = Dir$(strLooking & "*.doc")
Do While myFile <> ""
Debug.Print myFile
Application.PrintOut FileName:=strLooking & myFile, _
Range:=wdPrintRangeOfPages, Item:= _
wdPrintDocumentContent, Copies:=1, Pages:="1", PageType:= _
wdPrintAllPages
myFile = Dir$
Loop
End Sub
6 czerwca 2009
Niedawno na grupach dyskusyjnych pojawiło się pytanie o to, jak sprawdzić w którym z katalogów jest najwięcej plików. Pliki, które były w podkatalogach nie miały się liczyć, czyli przykładowo dla C:\ mogło być 10 plików a dla C:\Windows 200 plików.
Jako rozwiązanie problemu wybrałem napisanie skryptu w PowerShellu, który zamieszczam poniżej:
ls . -force -recurse | Where-Object {
$_.PSisContainer -eq $true
} | ForEach-Object {
Write-Progress 'Examining Folder' ($_.FullName); $_
} | ForEach-Object {
$result = '' | Select-Object Path, Count;
$result.Path = $_.FullName;
$result.Count = @($_ | ls -force -ea SilentlyContinue `
| where {$_.PSisContainer -eq $false}).length; $result
} | sort Count -descending |foreach{$_.Path;$_.Count}
Co tu się dzieje? Najpierw za pomocą ls -r pobieramy strukturę plików i katalogów z której zostawiamy tylko katalogi.
Dla każdego z nich rozpoczynamy od wyświetlenia jego nazwy za pomocą Write-Progress. Potem ze stringa $result tworzymy
sobie strukturę o polach Path i Count. Do Path zapisujemy aktualny katalog. W Count chcemy mieć ilość plików.
W tym celu znów odpalamy ls ale już nie rekurencyjnie. Dostajemy listę z której pobieramy jej długość i zapisujemy w Count.
Następnie zostaje posortowanie wyników malejąco i wyświetlenie nazwy każdego katalogu i liczby jego plików.
Znaczek @ jest konieczny ponieważ PowerShell automatycznie jednoelementowe tablice zmienia w pojedyncze
obiekty a taki pojedynczy obiekt nie ma właściwości Length. Znaczek ten po prostu rzutuje obiekt na tablicę.
23 kwietnia 2009
Dziękuję wszystkim, którzy przyszli dziś na moją sesję o Singularity na ITAD. Prezentację zamieszczam tutaj.

