![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Handle's
1987 © (2009-11-11 11:30:00)каково максимально возможное количество десткрипторов можно создать в рамках приложения.
Игорь Шевченко (2009-11-11 13:41:00) [1]Это неправильный подход - исследовать макисмальное количество именно Handles - они нафиг никому не сдались.
Во-первых, каждый созданный объект занимает какое-то место в памяти, как в ядерной, так и в прикладной. Объем памяти и там и там ограничен, гораздо больше шансов получить ошибку из-за этого ограничения. Во-вторых, существуют квоты на использование ядерной памяти процессом.
В-третьих, что-то явно в консерватории неправильно.
Riply (2009-11-11 13:24:00) [2]> Поэтому стало интересно.
Если исходить из структуры таблицы, то
максимальное кол-во Handle`ов процесса выражается примерно так:
(PAGE_SIZE div SizeOf(HANDLE_TABLE_ENTRY)) * (PAGE_SIZE div SizeOf(PHANDLE_TABLE_ENTRY)) * (PAGE_SIZE div SizeOf(PHANDLE_TABLE_ENTRY))
Т.е. что-то типа: 512 * 1024 * 1024.
(больше просто в таблицу не влезет :) )
P.S.
Для проверки структуры таблицы, созадавала 512 * 512 + 16 Handle`ов - никто и не пискнул :)
Дмитрий Белькевич (2009-11-11 12:55:00) [3]
> Поэтому стало интересно.
У разных операционок (имеется в виду windows'ы) разные ограничения на количество одновременно открытых файлов. Ограничения, насколько я помню, рамками приложения не ограничены.
Пока что смутно представляю ситуацию необходимости одновременного открытия 78 500 файлов.
> использую компонент для аккумуляции множества файлов в одном
> (в компоненте имеется возможность использовать транзакции).
>
Если компонент одновременно открывает такое количество файлов - то имеет смысл от него отказаться, он написан неверно. Какие бы там 'транзакции' он не использовал. И, вообще, что значит 'имеет возможность использовать'? Никаких транзакций в windows'ах нет (маловероятно, что речь про транзакции ntfs). Транзакции приложения 'придумывают' себе сами.
Сергей М. (2009-11-11 11:56:00) [4]
> Удалять его сразу после передачи нельзя
Кого "его" ?
1987 (2009-11-11 11:51:00) [5]использую компонент для аккумуляции множества файлов в одном (в компоненте имеется возможность использовать транзакции). В рамках транзакции приходится открывать каждый из множетва файлов, для этого создаю и передаю FileStream. Удалять его сразу после передачи нельзя. Это можно делать только после подтверждения транзакции. Поэтому стало интересно.
Сергей М. (2009-11-11 11:40:00) [6]
> попробывал тут создать 78 500 TFileStream'ов
Это что, спортивный интерес ? Испытание Винды на прочность-вшивость ?
каков практический смысл в таком бешеном количестве одновременно существующих объектов ?
1987 (2009-11-11 11:38:00) [7]
> десткрипторов чего?
ну ,например, того же FileStream'а. P.S. попробывал тут создать 78 500 TFileStream'ов - в результате появилась ошибка - недостаточно квот и повисла вся винда, поэтому стало интересно.
clickmaker (2009-11-11 11:32:00) [8]десткрипторов чего?