Вниз
Скачать: CL | DM;

Как сделать строку длиной больше мильярда?   Найти похожие ветки 

← →
Е-Моё имя ©   (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]

понятно


← →
Anatoly Podgoretsky ©   (2003-11-05 21:01) [41]

panov © (05.11.03 18:00) [34]
Е-Моё имя © (05.11.03 18:06) [35]

Размер страницы 4к, размер кластера кратный этому, до 64 к
Исходя из этого я бы выбрал 64к
Кроме того ты еще обязан ослеживать переходы строки через границу буфера.


← →
vuk ©   (2003-11-05 21:05) [42]

Я бы вообще буферизованный поток реализовал...


← →
k-man ©   (2003-11-05 21:16) [43]

А Е-Мое еще говорило что оно не программирует :)
Обманывало, однако ;)


← →
app ©   (2003-11-05 23:16) [44]

Это вторая специальность, кроме основной, не не стоит ли нам с этим в его знаменитую ветку.


← →
Е-Моё имя ©   (2003-11-06 09:10) [45]


> Кроме того ты еще обязан ослеживать переходы строки через
> границу буфера.


> Я бы вообще буферизованный поток реализовал...

ага, ради элементарной задачи такие старания? не стоит того, мне кажется.


> k-man © (05.11.03 21:16) [43]

не было такого, так что тсссс... (см.[44])


← →
vuk ©   (2003-11-06 10:15) [46]

>не стоит того, мне кажется.
Сделать поток, буферизующий чтение из другого потока - задача ровно на то же самое время, что и реализация того же самого действия вне потока. А пригодиться может неоднократно да и в результате сам алгоритм обработки файла будет более простым и понятным т.к. вся буферизация будет внутри потока и происходить будет прозрачно для алгоритма.


← →
Е-Моё имя ©   (2003-11-06 10:20) [47]

ну в принципе, было бы полезно, согласен...
как я понял - свести чтение к MyStream.ReadLn?

---
nil


← →
vuk ©   (2003-11-06 10:32) [48]

Не Readln, а read. Хотя, в принципе, можно и Readln организовать - буфер ведь в памяти будет и вместо посимвольного чтения можно будет использовать сканирование памяти.


← →
Igorek ©   (2003-11-06 11:09) [49]

Я бы свой клас строки написал. Без ограничения на длину. Просто и удобно.


← →
ИдиотЪ ©   (2003-11-06 11:13) [50]

ограничение есть на длину - int64, если стандартными средствами


← →
k-man ©   (2003-11-06 13:44) [51]


> не было такого, так что тсссс... (см.[44])

Было, было... Я то знаю..
Шепотом: Ты значит шпийон?



Страницы: 1 2 вся ветка

Скачать: CL | DM;



Память: 0.56 MB
Время: 0.015 c
3-89766
ST_
2003-11-07 01:30
2003.11.27
Поле Boolean


6-90026
Tol-123
2003-10-01 14:07
2003.11.27
Широковещательный TCP пакет


14-90120
J_S
2003-11-04 02:14
2003.11.27
Вот какой спам нонче валицца :((.... (+)


1-89823
TUser
2003-11-17 04:30
2003.11.27
Range check error


1-89947
mmmaloy
2003-11-18 01:05
2003.11.27
TreeView программно




   Наверх