![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
StringList - есть ли ограничения на размер массива? [D7, XP]
igorium © (2011-12-24 14:48:00)Всем привет.
Нужно сделать огромный массив из Strings, где будут храниться пути ко всем нужным файлам.
Количество файлов может быть огромным и 10'000 и 100'000.
Может даже несколько сотен тысяч файлов.
Соответственно вопрос - есть ли ограничения на использования больших массивов?
И сколько памяти этот массив будет жрать?
Если я правильно понял, то string ест 1байт на 1символ.
То если прикинуть путь 1 файла занимает ~100символов = 100байт.
100'000 файлов * 100 байт = 10'000'000 байт = 10 Мбайт.
Я правильно посчитал?
Sha (2011-12-24 19:06:00) [1]может, скажете еще, что с текстовыми файлами можно работать без помощи TMemo?
Dennis I. Komarov (2011-12-24 17:54:00) [2]
> Поэтому появилась идея создать ПрогрессБар.
Очереной XYZ, но ведь нет, мы злые...
З.Ы. За то время пока список будет формироваться, сколько файлов уже могуть и покинуть сей FS, а новые появиться...
РЭЗУМЭ: Идея бредовая...
Anatoly Podgoretsky (2011-12-24 17:26:00) [3]> igorium (24.12.2011 17:12:11) [11]
Утилиты Виндоус прекрасно обходятся без этого. А окрыть 100 000 графических
файлов наверно за это время успеешь состариться, тут уж не до Прогресса
igorium (2011-12-24 17:12:00) [4]А как иначе?
Идет поиск по все каталогам, и если находится файл *.jpg, то этот файл открывается и считывается информация.
Файлов ОЧЕНЬ много.
Соответственно программа работает долго - от 30 сек до нескольких минут.
Поэтому появилась идея создать ПрогрессБар.
Но для этого надо сначала пройти по все каталогам, найти файлы, но не обрабатывать их, а сохранить пути, чтобы 2-й раз не искать.
А затем уже включить ПрогрессБар = (i / CountALL).
знайка (2011-12-24 17:08:00) [5]А для чего сразу все в памяти держать?
igorium (2011-12-24 17:02:00) [6]Спасибо.
Получается в худшем случае размер = 170Мб*4 = 680 Мбайт.
Это кошмар.
Придется идти другим путем :(
Anatoly Podgoretsky (2011-12-24 16:47:00) [7]> igorium (24.12.2011 16:37:07) [7]
Неправильно. Размер CHAR не фиксирован, и составляет от 1 до 4 байт в общем
igorium (2011-12-24 16:37:00) [8]
> Anatoly Podgoretsky © (24.12.11 15:58) [6]
> Не надо массив из Strings, тем более, что Strings не имеет
> средств хранения.
> А надо массив из String
Описался я.
Я имел в виду String'и.
Так в итоге я правильно посчитал?
Anatoly Podgoretsky (2011-12-24 15:58:00) [9]
> А в чем хранить массив из Strings ?
Не надо массив из Strings, тем более, что Strings не имеет средств хранения.
А надо массив из String
igorium (2011-12-24 15:43:00) [10]
> Jeer © (24.12.11 15:34) [3]
> И зачем тебе TStringList ?
А в чем хранить массив из Strings ?
Каждый элемент массива выглядит так:
"c:\моя_папка\моя_подпапка\...\моя_подпапка\мой_файл.jpg"
Dennis I. Komarov (2011-12-24 15:41:00) [11]
> Если я правильно понял, то string ест 1байт на 1символ.
далеко не всегда, если ANSI то да...
Jeer (2011-12-24 15:34:00) [12]И зачем тебе TStringList ?
igorium (2011-12-24 15:04:00) [13]
> Anatoly Podgoretsky © (24.12.11 14:52) [1]
> 16 (12) * N + N * SizeOf(Char)
16(12) - Это 16 или 12 ?
Размер Chara ~1байт.
Итого размер массива = N*(16+1) = 17*N байт = 17 * 100'000 файлов * 100 байт = 170 Мбайт.
Так?
И ограничение размера массива только в том, что хочу ли я такую прорву памяти занимать?
Anatoly Podgoretsky (2011-12-24 14:52:00) [14]> igorium (24.12.2011 14:48:00) [0]
16 (12) * N + N * SizeOf(Char)