Блокнот Графомана
Модератор: Модераторы
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub, для особо талантливых, повторяю. НЕТ у меня возможности убрать гигантскую строку -- она данность компонента. И работать с ней приходится методами компонента. И любые методы оптимизации должны учитывать данный факт. Или у тебя есть какой-нибудь FastMemo? А преобразования туда-сюда только из-за модных тенденций (даже ускоряющих работу) это путь ведущий к еще большим тормозам. Я не могу даже напрямую вставить, в процессе преобразования, символы конца строки, так как они просто тупо игнорируются.
А вариант работы с memo напрямую, кстати, (как предлагается) грозит еще бОльшими тормозами, так как текст пересчитывается после каждого измененного символа. И еще надо как-то его отображать Ах да... в контексте данной работы мне нет необходимости работать с плавающими длинами символов -- я ищу всего-лишь символы '<' и ">" и несколькими обрывками тегов, для проверки необходимости разбивания строки на несколько. Это сделано сознательно.
ЗЫ: пока прихожу к мнению, что надо экспортировать текст из Memo в текстовый буфер и просто построчно (или по мере исчерпания буфера) скидывать его обратно.
А вариант работы с memo напрямую, кстати, (как предлагается) грозит еще бОльшими тормозами, так как текст пересчитывается после каждого измененного символа. И еще надо как-то его отображать Ах да... в контексте данной работы мне нет необходимости работать с плавающими длинами символов -- я ищу всего-лишь символы '<' и ">" и несколькими обрывками тегов, для проверки необходимости разбивания строки на несколько. Это сделано сознательно.
ЗЫ: пока прихожу к мнению, что надо экспортировать текст из Memo в текстовый буфер и просто построчно (или по мере исчерпания буфера) скидывать его обратно.
>> НЕТ у меня возможности убрать гигантскую строку
Тебя никто не просит ее убирать.
>>она данность компонента
Я надеюсь ты понимаешь что только "компонента", а физически например у виндового мемо\едита нету никакой паскалевской строки, темболее в utf8
>>И работать с ней приходится методами компонента.
>>А вариант работы с memo напрямую, кстати, (как предлагается) грозит еще бОльшими тормозами, так как текст пересчитывается после каждого измененного символа.
Дак ты работаешь методами тмемо или нет? Насколько я понимаю больших тормозов чем у тебя сейчас быть не может))
>>А преобразования туда-сюда только из-за модных тенденций
Модные тенденции наблюдаются у тебя - работаешь какимито методами какогото компонента... ты внутрь их заглядывал хоть?
"Работая методами компонента" ты постоянно гоняешь мегабайты туда-сюда паралельно кодируя и перекодируя.
Ты задался вопросом - почему тормозит. я предположил почему и предлагаю сделать постаринке - просто и быстро.
В ответ - вобщемто не тормозит уже, по другому небывает\неумею.
Тебя никто не просит ее убирать.
>>она данность компонента
Я надеюсь ты понимаешь что только "компонента", а физически например у виндового мемо\едита нету никакой паскалевской строки, темболее в utf8
>>И работать с ней приходится методами компонента.
>>А вариант работы с memo напрямую, кстати, (как предлагается) грозит еще бОльшими тормозами, так как текст пересчитывается после каждого измененного символа.
Дак ты работаешь методами тмемо или нет? Насколько я понимаю больших тормозов чем у тебя сейчас быть не может))
>>А преобразования туда-сюда только из-за модных тенденций
Модные тенденции наблюдаются у тебя - работаешь какимито методами какогото компонента... ты внутрь их заглядывал хоть?
"Работая методами компонента" ты постоянно гоняешь мегабайты туда-сюда паралельно кодируя и перекодируя.
Ты задался вопросом - почему тормозит. я предположил почему и предлагаю сделать постаринке - просто и быстро.
В ответ - вобщемто не тормозит уже, по другому небывает\неумею.
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub писал(а):Дак ты работаешь методами тмемо или нет? Насколько я понимаю больших тормозов чем у тебя сейчас быть не может))
может. И даже уже были, но от них избавиться было как раз таки легко.
zub писал(а):Дак ты работаешь методами тмемо или нет?
Пока я построчно изымаю строки, обрабатываю их и кладу обратно. И как раз таки обработка строки происходит быстро... в общем, как я понял, ты просто рекламируешь свой код, поэтому придется разбираться самому.
zub писал(а): ты внутрь их заглядывал хоть?
заглядывал... без бутылки, а лучше двух, лучше туда не лезть.
zub писал(а):"Работая методами компонента" ты постоянно гоняешь мегабайты туда-сюда паралельно кодируя и перекодируя.
нету там перекодировок. За исключением сохранения/загрузки данных в файл.
zub писал(а):я предположил почему и предлагаю сделать по старинке - просто и быстро.
то есть, тупо преобразовав в бинарный формат, а потом обратно? накуа? Я работаю в одной кодировке ПОБАЙТОВО, а потом скидываю результат построчно. Если я переделаю как хочется тебе (с учетом, что тормозит работа со строками в целом, а не с каждой конкретной строкой, это я проверил, по старинке, кстати), то результат явно не изменится. Первое правило оптимизации -- сначала разберись какой код тормозит.
ЗЫ: кстати, у меня возникло подозрение где проблема... и она, если все верно, совсем в другом месте.
И как раз таки обработка строки происходит быстро... в общем, как я понял, ты просто рекламируешь свой код, поэтому придется разбираться самому.
Бог с тобой, я такими вещами никогда не занимался и не планирую. Рекламировать мне нечего))
Внутрь тмемо я заглядывал во времена 0.9 - при чтении строчки из него копировалось всё содержимое, перекодировалось, выбиралсь и возвращалась нужная строка. тоже самое в обратном порядке при изменении строки.
Но если ты говоришь что сейчас это стало работать быстро - значит работа со строками в тмемо переписана, лишнее туда-сюда не гоняется. И тормозит твой код((
нету там перекодировок. За исключением сохранения/загрузки данных в файл.
Это чудо какоето - винда научилась отображать утф8 без перекодирования?
то есть, тупо преобразовав в бинарный формат, а потом обратно? накуа? Я работаю в одной кодировке ПОБАЙТОВО, а потом скидываю результат построчно. Если я переделаю как хочется тебе (с учетом, что тормозит работа со строками в целом, а не с каждой конкретной строкой, это я проверил, по старинке, кстати), то результат явно не изменится. Первое правило оптимизации -- сначала разберись какой код тормозит.
Мне хочется... Мне пофиг)) 99% тормозит у тебя какойнить s:=s+ss[i] в цикле. Думаешь нет?
Почему ты досихпор не нашел что тормозит и не выложил сюда?
у меня возникло подозрение
Ты еще на битву экстрасенсов обратись, там подозрение усилят или ослабят
(с учетом, что тормозит работа со строками в целом, а не с каждой конкретной строкой, это я проверил, по старинке, кстати)
Ну ты загнул... У FPC есть конечно проблемы со строками, но это не твой случай. Касательно топика строки работают максимально быстро и вцелом и поотдельности)), просто ктото неумеет-непонимает-незнает но делает как удобно ему несмотря ниначто
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub писал(а):Внутрь тмемо я заглядывал во времена 0.9 - при чтении строчки из него копировалось всё содержимое, перекодировалось, выбиралсь и возвращалась нужная строка. тоже самое в обратном порядке при изменении строки.
тут я просто беру строку и возвращаю обработанную. вся работа в одной кодировке и смущает именно зависимость от размера текста в мемо. Как будто сам текст куда-то копируется полностью, а потом записывается обратно. Попытаюсь скопировать текст в TStringList и заполнить memo заново, уже измененным текстом. По идее, конечно, надо работать через поток, но тут я полный ламер.
zub писал(а):99% тормозит у тебя какойнить s:=s+ss[i] в цикле. Думаешь нет?
я не думаю. Я проверяю. И потом, в этой ситуации не подтормаживала бы работа по вставке тегов -- там код как раз таки простой и без хитро вложенных циклов и присваиваний. А ведь он тоже подтормаживает заметно, но не так сильно (если что, то "заметно" это 30 и более процентов).
zub писал(а):Почему ты досихпор не нашел что тормозит и не выложил сюда?
Хотя бы потому, что для проверки некоторых вариантов требуется серьезно переделывать код, а я не только программированием занят((( Плюс, я все же пытаюсь тестовыми закладками обнаружить тормозное место.
zub писал(а): там подозрение усилят или ослабят
зачем. То, что я думал, не исправило ситуацию. Тут как раз проверить легко было.
zub писал(а):У FPC есть конечно проблемы со строками, но это не твой случай.
Боюсь, дело в том, что сам компонент работает через буфер, который подтормаживает.
Код и рецепт воспроизведения тормозов в студию.
Похмел+нечего делать))
Похмел+нечего делать))
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
В общем, я разобрался. Это тормозит именно компонент из-за большого размера загруженных в него данных.
Если скопировать текст в TStringList, и он имеет более-менее нормальные размеры (где он вытягивается в одну строку), то после достаточно долгой загрузки в нее, что характерно, текст преобразуется мгновенно..., правда, при этом нарушается разметка, но это уже мелочи.
Придется или терпеть, или сбрасывать на диск, преобразовывать низкоувневыми командами каждую строчку и загружать обратно в мемо.
Если скопировать текст в TStringList, и он имеет более-менее нормальные размеры (где он вытягивается в одну строку), то после достаточно долгой загрузки в нее, что характерно, текст преобразуется мгновенно..., правда, при этом нарушается разметка, но это уже мелочи.
Придется или терпеть, или сбрасывать на диск, преобразовывать низкоувневыми командами каждую строчку и загружать обратно в мемо.
В общем, я разобрался. Это тормозит именно компонент из-за большого размера загруженных в него данных.
Вот же люди. тормозит всё вокруг, но не у них. Несколько постов назад всё вроде ок было с компонентом((
Не подскажешь почему в других программах не тормозит? наверно потому что не на паскале написаны))
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub, потому что нефиг загружать туда файлы по метру и более. (тестовый файл был 2,5 Мб ) Особенно на слабом компе с малым количеством оперативки. Тут явно свопится на диск, что само по себе не ускоряет прогу.
И я не говорил, что с компонентом все хорошо. Я говорил, что в своем коде я уверен. Теперь, зная в чем проблема, ее легче решить или обойти.
И я не говорил, что с компонентом все хорошо. Я говорил, что в своем коде я уверен. Теперь, зная в чем проблема, ее легче решить или обойти.
Лекс Айрин, ты чтото делаешь нетак.
Ну не должно быть так чтобы вставка какогото тега в открытый 2хмеговый файл происходила с существенной задержкой на I7 c 16 гигами озу. при этом успевая раскрутить вентилятор. Да, мемо вносит свой вклад в падение производительности, но не до такойже степени.
Это первое что должно быть сделано при тестировании. Чтоб не сесть в лужу в ответственный момент - стресстесты обязательны, или нефиг вообще такую программу запускать - вдруг чтото сделаешь нетак - всё повиснет, раскрутится и перегреется))
Да еще программа тормозит до повисания при копировании большого текста в клипборд. Давай и это запретим))
Ну не должно быть так чтобы вставка какогото тега в открытый 2хмеговый файл происходила с существенной задержкой на I7 c 16 гигами озу. при этом успевая раскрутить вентилятор. Да, мемо вносит свой вклад в падение производительности, но не до такойже степени.
zub, потому что нефиг загружать туда файлы по метру и более
Это первое что должно быть сделано при тестировании. Чтоб не сесть в лужу в ответственный момент - стресстесты обязательны, или нефиг вообще такую программу запускать - вдруг чтото сделаешь нетак - всё повиснет, раскрутится и перегреется))
Да еще программа тормозит до повисания при копировании большого текста в клипборд. Давай и это запретим))
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub писал(а):Ну не должно быть так чтобы вставка какогото тега в открытый 2хмеговый файл происходила с существенной задержкой на I7 c 16 гигами озу.
Если это у тебя слабый комп... Думаю, на таком компе проблемы начнутся позже. И не вставка тега, а вставка/удаление тегов То есть перетряхивается весь текст.
zub писал(а):Это первое что должно быть сделано при тестировании.
Второе. Сначала прогу надо написать. Вообще-то она еще толком не дописана. Печать придется переделать, так как я не стал пока выправлять огрехи создаваемые мемо -- по хорошему, надо создавать буфер преобразования и выдавать на печать постранично... заодно, исправить диалог замены, вот теперь вылезли тормоза конвертера... в общем, для тестирования прога явно не готова. Ах да, к тому же, при конвертации портится разметка, то есть придется как-то это исправлять.
По хорошему, надо бы создать буфер и подгружать текст при необходимости, но не исключены ситуации когда текст сразу листают на середину/конец. А это сразу же тормоза.
>>в общем, для тестирования прога явно не готова.
не, не... погодь))
По ссылке из первого поста при компиляции всем транковым - вылет на старте. после показа диалога про чтототам загрузить в процедуре обработки таймера идет попытка обращения к еще несозданому интерфейсу. Незнаю уж выложена кривая версия или такая жесть прокатывает в лазаре который ты пользуешь.
Ты серьезно думаешь писать чтото серьезное не используя отладку?
не, не... погодь))
По ссылке из первого поста при компиляции всем транковым - вылет на старте. после показа диалога про чтототам загрузить в процедуре обработки таймера идет попытка обращения к еще несозданому интерфейсу. Незнаю уж выложена кривая версия или такая жесть прокатывает в лазаре который ты пользуешь.
Ты серьезно думаешь писать чтото серьезное не используя отладку?
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub, вообще-то я ей уже пользуюсь. И вылетов нет)))
Лазарус у меня транковый, а вот паскаль нет (3.0.0) -- почему-то у меня вылетает Лазарь при сборке под транковым компилятором
А что именно говорит? И какую версию конкретно собираешь?
А отладку я, конечно, использую. Но не отладчик.
Добавлено спустя 14 минут 26 секунд:
В любом случае, есть уже скомпилированный виндовый вариант. Под линуксом, если что, его проще "напоить". У меня просто нет никсовой тачки, поэтому я даже не смогу проверить там работоспособность.
вот моя процедура таймера, так сказать, транковая.
Лазарус у меня транковый, а вот паскаль нет (3.0.0) -- почему-то у меня вылетает Лазарь при сборке под транковым компилятором
А что именно говорит? И какую версию конкретно собираешь?
А отладку я, конечно, использую. Но не отладчик.
Добавлено спустя 14 минут 26 секунд:
В любом случае, есть уже скомпилированный виндовый вариант. Под линуксом, если что, его проще "напоить". У меня просто нет никсовой тачки, поэтому я даже не смогу проверить там работоспособность.
вот моя процедура таймера, так сказать, транковая.
Код: Выделить всё
procedure TFMain.Timer1Timer(Sender: TObject);
Var
pos_:integer;
Str:String;
begin
FMain.MemoBuff.Clear;
FMain.MemoBuff.PasteFromClipboard;
FMain.TimeView.Caption:=TimeToStr(Time);
FMain.DateView.Caption:=DataCompile;
FExtBuff.Memo1.Clear;
FExtBuff.Memo1.PasteFromClipboard;//синхронизация с буфером обмена.
//проверяется равенство буфера содержимого мемо и первого элемента списка
//если не равен, то мемо копируется в список как его первый элемент.
if FExtBuff.ListBuff.Items[0]=FExtBuff.Memo1.Lines.Text then
Begin end else
begin
FExtBuff.ListBuff.Items.Insert(0,FExtBuff.Memo1.Lines.Text);
end;
{ //это код добавленный после публикации, да и не знаю стоит ли его оставлять.
PosX.Caption:= IntToStr(Editors.CaretPos.x+1);// странно видеть позицию 0
PosY.Caption:= IntToStr(Editors.CaretPos.y+1);// странно видеть строку 0
}
Begin End;
//
end; А отладку я, конечно, использую. Но не отладчик.
Интересно, что можно отладить с вырезаной отладочной информацией))
вот моя процедура таймера, так сказать, транковая.
ох по рукам надо за такое))
А что именно говорит? И какую версию конкретно собираешь?
Я же написал. создание интерфейса прервано модальным диалогом грузить какуюто фигню или не грузить, а в процедуре таймера идет обращение к не созданым элементам интерфейса. Версий отличных от ссылки в первом посте не искал))
- Лекс Айрин
- долгожитель
- Сообщения: 5723
- Зарегистрирован: 19.02.2013 16:54:51
- Откуда: Волгоград
- Контактная информация:
zub писал(а):что можно отладить с вырезаной отладочной информацией))
да много чего... гораздо больше, чем с полурабочим отладчиком.
zub писал(а):ох по рукам надо за такое))
работает... и пока не возникало проблем.
zub писал(а): создание интерфейса прервано модальным диалогом грузить какуюто фигню или не грузить, а в процедуре таймера идет обращение к не созданым элементам интерфейса.
у меня там много что грузится... дерево заметок, файл кинутый на иконку... файл с предыдущей сессии... не зная где глюк поправить сложно... подозреваю, что речь идет о крайнем.
