|
|
| Посл.отвђт | Сообщенiе |
|
|
Дата: Авг 16, 2003 16:19:41 Значения хендлов объектов ядра иду через 4 начиная с 4. При создании процесса система сама открывает несколько объектов. Так что изначально несколько хендлов уже есть. Поэтому hFile1 будет =~50h или около того. Соответственно hFile2 = 54h и т.д. А что касается открытия/закрытия-открытия/закрытия.... Если бы было так, как ты предполагаешь, то, например, процесс открыл 1000 объектов, а потом все их закрыл - место в таблице хендлов освободилось. Если процесс продолжает открывать объекты, то какой смысл выделять доп. память под таблицу хендлов раз в ней есть свободное место. Это опять все теория, а у тебя практическая проблема. Не будет процесса с 1000 открытых хендлов. Ну если только автор специально этого не сделает. А сделает, ну и сам дурак ;-) |
|
|
Дата: Авг 17, 2003 12:34:58 Здесь я согласен. Кстати по поводу количества хэндлов - знаю я проги с >3K количеством хэндлов (GDI) :) Кроме того - можно посмотреть как выдаются PID процесса - тут очень похоже. К примеру в unix где многопоточность реже используется чем fork (и следовательно рождение и умирание процессов там более интенсивное чем в win32) можно наблюдать, что PID процессов растет до 32768 (если не ошибаюсь) а потом опять начинается с начала. Кроме этого размер таблицы хэндлов в элементах в винде скорее всего будет на процесс - кратный максимальному количеству хэндлов в процессе и гранулированном на padding таблицы в большую сторону. и ИМХО он не будет уменьшаться, либо очистка таблицы будет происходить в уж очень экстремлаьных случаях нехватки памяти. |
|
|
Дата: Авг 17, 2003 16:24:49 [ rst: Кстати по поводу количества хэндлов - знаю я проги с >3K количеством хэндлов (GDI) ] Очень может быть, но мы то говорим про kernel-object хендлы, а не про User/GDI-object хендлы. Это совсем разные вещи! User/GDI-object хендлы вообще не попадают в таблицу хендлов процесса. Для них есть две глобальные для системы таблицы. Почитай раздел "USER and GDI Objects" в доке к айсу. Дальше я не совсем понял, что ты сказал, но разумеется система пытается как то оптимизировать размер таблицы хендлов. Точного алгоритма я не знаю, но думаю, что вряд ли она будет выделять дополнительную память под нее, даже при огромном ее количестве, если в таблице хендлов имеется много свободных мест. |
|
|
Дата: Авг 17, 2003 20:13:23 По поводу оптимизации таблицы хэндлов - я хотел сказать, что если процесс открыл одновременно 100 миллионов хэндлов, то размер таблицы вырастет до 100 миллионов записей, и не будет "моментально" оптимизирован при закрытии хэндлов. логично? следовательно для такого "жирного" процесса даже если он в конце концов зкроет все свои хэндлы нужно будет делать итерации не до 65535 а до 100 000 000 |
|
|
Дата: Авг 18, 2003 13:07:32 · Поправил: Four-F Теоритически может оно и так, но практически ты же понимаешь, что такого процесса никогда не будет. И вообще. Ты практически то попробовал что-нить из обсужденного здесь? Что мы там закрываем то, сом порт? Уже не помню ;-) Если его, то это наверное будет объект порт или файл. Если файл, то в аттаче статья Ашота "Как получить список открытых файлов на Win9x". Пага, вроде, умерла - не ищи. Если нужны будут исходники - могу поискать у себя на винте. Можешь, кстати, к Ашоту обратиться - он наверняка че-нить дельное подскажет. Где его найти думаю знаешь. ЗЫ: И заканчивай теоритизировать :-) |
|
|
Дата: Авг 18, 2003 13:39:02 |
|
|
Дата: Авг 18, 2003 15:19:38 Может я чего-то не понимаю, но нельзя ли под 9x использовать API функцию CreateToolhelp32Snapshot ? |
|
|
Дата: Авг 18, 2003 16:31:47 Так она хендлы не перебирает. |
|
|
Дата: Авг 18, 2003 16:34:18 Ну статья у Ашота вроде называется "Как получить список открытых файлов на Win9x", про хэндлы не сказано ;-) |
|
|
Дата: Авг 18, 2003 17:38:03 Мда... Это я по запаре протупил конкретно ;-))) Но, с Ашотом все равно поговорить стоит. |
|
Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.092 |