Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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)


Наверх

Титульная страница Поиск, карта сайта Написать письмо