Форум: "Потрепаться";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
ВнизКак сделать строку длиной больше мильярда? Найти похожие ветки
← →
Е-Моё имя (2003-11-05 14:57) [0]setlength кричит out of memory, то есть собственно не setlength, а getmem
← →
panov (2003-11-05 15:00) [1]>Е-Моё имя © (05.11.03 14:57)
setlength кричит out of memory, то есть собственно не setlength, а getmem
Записывать в файл и работать со строкой по частям.
← →
Е-Моё имя (2003-11-05 15:05) [2]то есть ограничение длины 2^32 просто теоретическое?
← →
Е-Моё имя (2003-11-05 15:08) [3]то есть 2^31...
← →
Е-Моё имя (2003-11-05 15:09) [4]в справке:
AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
WideString ~2^30 characters 4 bytes to 2GB Unicode characters;
multi-user servers and multi-language applications
и как сделать 2-гиговую строку?
← →
panov (2003-11-05 15:09) [5]В системе все равно есть ограничение на выделяемую память. А вот какое - не знаю-)
← →
Е-Моё имя (2003-11-05 15:11) [6]вона как... ну оперативки у мну 512
на винте десяток гиг есть...
← →
Игорь Шевченко (2003-11-05 15:11) [7]Конечно теоретическое. Кроме строки в этих 2^31 должна еще программа находиться и библиотеки системные...
← →
Ломброзо (2003-11-05 15:11) [8]Mapped files
← →
Anatoly Podgoretsky (2003-11-05 15:12) [9]Е-Моё имя © (05.11.03 15:08) [3]
Да, ограничение системы и компилятора, в будущем будет 2^63
Эти два гигабайта подо все, не только под одну строку.
← →
SPeller (2003-11-05 15:15) [10]
>в будущем будет 2^63
9Х-овые винды уже не выдержат...
← →
Anatoly Podgoretsky (2003-11-05 15:17) [11]9x да, а остальные давно выдерживают, но не Wintel, а Дельфи пока только для Wintel
← →
vuk (2003-11-05 15:18) [12]А нафига это все?
← →
Е-Моё имя (2003-11-05 15:19) [13]а как можно узнать максимально допустимый реальный размер строки?
← →
Е-Моё имя (2003-11-05 15:19) [14]
> vuk © (05.11.03 15:18) [12]
:)))
да вот, возникла задачка
← →
Anatoly Podgoretsky (2003-11-05 15:19) [15]Ну например загнать 4 гб файл в строку и применить POS, это так один из вариантов.
← →
vuk (2003-11-05 15:20) [16]to Е-Моё имя:
>да вот, возникла задачка
Ну так опишите задачу-то...
← →
Е-Моё имя (2003-11-05 15:21) [17]файлик есть большой, больше гига длиной
TStrings.LoadFromStream не берет его...
придется наверное кусками...
← →
vuk (2003-11-05 15:23) [18]to Е-Моё имя:
>придется наверное кусками...
Ну либо кусками либо Memory Mapped Files.
← →
Anatoly Podgoretsky (2003-11-05 15:23) [19]Э тут другое дело, там расход памяти примерно в три раза больше, чем файл
← →
Е-Моё имя (2003-11-05 15:28) [20]прога писалась для маленьких файлов, потому strinlist сделал
это обработка почтовых логов
а тут сбой был на мыльном сервере, письма многотысячекратно дублировались, файлик получился за гиг
прога скопытилась =))))))))
буду наверное filestream делать
когда для 1С логов обработку делал, знал, что будет файл большой-там у мну filestream с разбиением на строки
а тут засада получилась..
← →
Anatoly Podgoretsky (2003-11-05 15:30) [21]Е-Моё имя © (05.11.03 15:28) [20]
Используй TextFile затраты по ресурсам минимальны
← →
Е-Моё имя (2003-11-05 15:32) [22]хорошо, всем спасибо
:)))
← →
panov (2003-11-05 15:55) [23]Ну для такой задачи самое простое логи в Бд загружать и там обрабатывать-)
← →
Е-Моё имя (2003-11-05 17:12) [24]хорошо бы, да логи пишет чужая прога ((
← →
Anatoly Podgoretsky (2003-11-05 17:19) [25]Е-Моё имя © (05.11.03 17:12) [24]
Так логи никто не советует писать, совет загружать в базу, если есть возможность то это лучший вариант по дальнейшей обработке
← →
Е-Моё имя (2003-11-05 17:38) [26]аааа
понял!
так я именно это и делаю :))
← →
Anatoly Podgoretsky (2003-11-05 17:41) [27]Ну тогда ReadLn самое экономичное
← →
Е-Моё имя (2003-11-05 17:41) [28]сделал на filestream
вот уже полчаса наверное обрабатывается, примерно 200 метров обработалось... долго как-то... может сетка загружена...
← →
Е-Моё имя (2003-11-05 17:42) [29]на readln - это больше изменений делать ;))
а времени даже на форум не хватает =)))
← →
Anatoly Podgoretsky (2003-11-05 17:45) [30]Е-Моё имя © (05.11.03 17:41) [28]
Ты будешь всю обработку брать на себя, будет ли она у тебя оптимальнее чем в ReadLn?
Е-Моё имя © (05.11.03 17:42) [29]
Меньше, сейчас ты ищешь концы строк, после этого различий нет, парсинг строки
← →
Е-Моё имя (2003-11-05 17:48) [31]
> будет ли она у тебя оптимальнее чем в ReadLn?
нет конечно
> Меньше, сейчас ты ищешь концы строк, после этого различий
> нет, парсинг строки
меньше, потому что Ctrl+C/Ctrl+V :))
можно ради интереса сделать вариант с Readln
но думаю проблема в сети - проц загружен далеко не полностью, памяти как грязи.
исходный файл лежит на одном сервере, база на другом сервере.
← →
Anatoly Podgoretsky (2003-11-05 17:49) [32]Хотя мне не видно твоей обработки, исхожу из общих случаев и сам обрабатывал логи, примерно такого размера, от моего апачи, месячный лог
← →
Е-Моё имя (2003-11-05 17:52) [33]обработка простая - читаю кусочки и бью на строки
нужные строки обрабатываю
проблема вот в чем - какого размера сделать куски для чтения из потока?
← →
panov (2003-11-05 18:00) [34]Ну насчет размера - кратное странице(по-моему 16к), не слишком большой, чтобы своппинга не было.
← →
Е-Моё имя (2003-11-05 18:06) [35]160 кил наверное в самый раз будет...
← →
panov (2003-11-05 18:17) [36]>Е-Моё имя © (05.11.03 18:06) [35]
160 кил наверное в самый раз будет...
Не ошибся? я думал о 16Бм-)
← →
Е-Моё имя (2003-11-05 18:23) [37]да нет, не ошибся :))
16 метров-не слишком ли много?
может тогда 160 метров? мне памяти для благого дела не жалко ;)))
← →
Е-Моё имя (2003-11-05 18:28) [38]вообще, в таком случае, какими критериями нужно руководствоваться? как искать золотую середину?
← →
panov (2003-11-05 18:33) [39]Ну, самое простое - отслеживать монитором использование страниц памяти. Не имеет смысла для такой задачи писать свой монитор, поэтому можно спокойно воспользоваться системными средствами...
← →
Е-Моё имя (2003-11-05 18:49) [40]понятно
Страницы: 1 2 вся ветка
Форум: "Потрепаться";
Текущий архив: 2003.11.27;
Скачать: [xml.tar.bz2];
Память: 0.52 MB
Время: 0.01 c