• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Вопросы по работе со строками

  • Автор темы Darker
  • Дата начала
N

nvyush

VladSh
Объясняю ещё раз — в оригинальном примере делался ОДИН опыт с 100000 конкатенаций для строки и sb.append для StringBuffer.
Разница ~11 раз в пользу StringBuffer. Эти результаты я не оспориваю. Но я провёл также серию из 10000 опытов с 10 конкатенаций для строки и sb.append для StringBuffer (в каждом опыте создавался новый StringBuffer, а не дописывался старый). Время исполнения для конкатенаций оказалось меньше, чем для StringBuffer. Поэтому я отказался от идеи использования StringBuffer для получения коротких строк, например, для msgbox. Если же нужно собирать мега-строки, то использование StringBuffer, разумеется, предпочтительнее.
 
D

Darker

тогда почему Ваш класс заваливается с ошибкой 14 (Out of String space), а если её забить, то вываливается в Overflow?
а размер fContent$ чему равен? Если >2gb, тут Вам и StringBuffer не поможет. Я имел ввиду если в сумме >2Gb,
возьмите файл меньше 2GB
И, да, нашел недочет в своем классе, забыл включить флаг о превышении лимита в 2Gb, подправил класс, Sorry!
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
80
nvy
Вот теперь всё понятно ))


а размер fContent$ чему равен? Если >2gb, тут Вам и StringBuffer не поможет. Я имел ввиду если в сумме >2Gb,
возьмите файл меньше 2GB
Я ж писал, гляньте в коде, - использовал файлы размером 53 и 110 Mb. Соответсвенно LenB() от них равен Len()*2, т.е как минимум в 10 раз меньше чем 2Gb.
Попробуйте, я даже код вызова дал, надо только путь к файлу подставить..
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
про 2Гб...
возникает закономерный вопрос - зачем с такими объемами работать, "в памяти"?
-2Гб - предел для процесса в хе86 32бит системах (на данный момент - большинство десктопов)
-файлы бывают и больше
-есть алгоритмы мап-редьюс - именно для обхода ограничений по памяти
-есть алгоритмы работающие с потоком (сразу), но надо подгонять процесс под них
 

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
80
lmike
Я сейчас наткнулся на то, что в LS работа со строками, даже до 2Gb - это теория (в случае работы с файлами более 50Mb)... StringBuffer в Java решает вопрос >= 2Gb или и там придётся дотачивать?
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 941
609
BIT
217
в java, в LDN, более сугбо :), память отводится jvm-у в ини файле...


но ограничения для 32бит такие же (а ЕБИм не сделал 64бит LDN и jvm в нём)
и разумеется - будут отъедены сервисные Мб, а потому будет менее 2Гб
а если жвм исполняется в контексте основного процесса (хотя врядли) - то всё ещё печальнее ;)

а потому точи-не-точи ИБМ+32бит+винтел - багофичи форева ;)
есть надежда (для серверов - КМК) на link removed

потому и нет смысла даже походить к 2Гб (вне зависимости от языка) на интеле 32бит
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!