Ingalime
-
Постов
354 -
Зарегистрирован
-
Посещение
-
Победитель дней
5
Активность репутации
-
-
Ingalime отреагировална Nick Peterson в TMemo для вывода лога тормозит
Благодарю! Стало чуть понятнее - если добавлять 1 строку без Memo.BeginUpdate; из-за какого-то другого бага FMX в процедуре TStyledMemo.DoViewportPositionChange ContentSizeChanged выставлялся в TRUE, даже если фактические размеры не менялись. Из-за этого запускался цикл
if ContentSizeChanged then begin for I := 0 to FLineObjects.Count - 1 do begin Line := FLineObjects[I]; if Line.Layout <> nil then FLineObjects.UpdateLayoutParams(Line.Layout); Line.InvalidateSize; end; FLineObjects.RenderLayouts; end приводящий к фризам. Если делать Memo.BeginUpdate, этого не происходит; увидеть фризы, о которых я говорю, можно растягивая форму с Memo.Align = Bottom.
Теперь к вопросу ЦПУ: Ваш пример в работе на 1-ядерной виртуалке
На домашнем компе с GlobalUseDirect2D := false;
Прикладываю архив с тестовым проектом, кому интересно поиграться :)
MemoSpeedTest.zip
-
Ingalime отреагировална Евгений Корепов в TMemo для вывода лога тормозит
Все ваши проблемы решаются добавлением трех строчек в код:
Перед началом работы, сразу задаем количество строк Memo.Lines.Capacity:=1000000; Мемо сразу зарезервирует в своем TStringList нужный объем. Это позволит сократить накладные расходы на добавление в несколько раз. Перед добавлением строк в Memo обязательно делаем Memo.BeginUpdate; Это отключит перерисовку и другие операции. После добавления строк в Memo обязательно делаем Memo.EndUpdate; Это отрисует все изменения которые мы произвели. Вот итоговый код (в форме еще глобальный счетчик FLinesCounter : Integer;):
procedure TForm1.FormCreate(Sender: TObject); Var I : Integer; begin Memo.Lines.Capacity:=1000000; Timer.Interval:=10; FLinesCounter:=1; Memo.BeginUpdate; for I := 1 to 10000 do begin Memo.Lines.Add('Это тест ' + FLinesCounter.ToString); Inc(FLinesCounter); end; Memo.EndUpdate; end; procedure TForm1.Button1Click(Sender: TObject); begin Timer.Enabled:=True; end; procedure TForm1.Log(const AMessage : String); const ConsMaxLogSize = 50000; begin Memo.BeginUpdate; // while Memo.Lines.Count > ConsMaxLogSize do // Memo.Lines.Delete(0); Memo.Lines.Add(AMessage); Memo.GoToTextEnd; Memo.EndUpdate; end; procedure TForm1.TimerTimer(Sender: TObject); begin Log('Это тест ' + FLinesCounter.ToString); Inc(FLinesCounter); end; Код добавляет в Мемо 10 тысяч строк за примерно пол секунды. И добавление по таймеру 100 строк в секунду отнимает примерно 0% процессорного времени. Все будет работать без тормозов до разумного предела, при очень больший количествах строк вы столкнетесь с тормозами выделения памяти приложению, тут нужно будет использовать иные механизмы.
-
Ingalime отреагировална Nick Peterson в TMemo для вывода лога тормозит
мой скрин как бы показывает обратное
два приложения, два одинаковых таймера (100мс в данном случае) на добавление строки. Одна и та же машина (2х ядерная виртуалка).
1 скрин FMX приложение, второй VCL
1 потребляет 30-50% CPU второй 6-8%
Мне нужен след. функционал: текст, являющийся логом и позволяющий промотать хоть немного вверх и скопировать любую.часть себя. Сейчас я ограничил до 300 строк, и с учетом убирания вот этого кода
фризы ушли. Юзеры конечно недовольны, что для просмотра остального надо жать дополнительные кнопки..
Позвольте пока считать вопрос открытым, может у кого есть на примере компонент или идеи с функционалом , описанным выше
-
Ingalime отреагировална sinuke в Перезапись файлов
Разместитеи их в ресурсы проекта. В приложении в какой-нибудь файлик записывайте версию приложения при последнем запуске. При старте приложения проверяй записанную версию и текущую. Если расходятся - проверяйте файлы и обновляете их ресурсов. Имхо
-
Ingalime отреагировална Maka в Перезапись файлов
Самым простым решением оказалось исправление файла System.StartUpCopy. Там комментариями разработчики явно указали, где код отвечающий за перезапись
-
Ingalime отреагировална krapotkin в TMemo для вывода лога тормозит
memo на 5000 строк (в VCL программе, т.е. "те парни из MS") пожирает 80% CPU при изменении/добавлении строки. по сути вся программа работает на лог.
потому что компонент внутри не очень простой, как бы вам ни казалось.
память перевыделять постоянно для этого монстра надо, и пробегать по строкам, перерассчитывать
поэтому просто не надо делать лог в мемо
если вам нужна только функциональность просмотра - написать отображальщик лога из sgtringlist - 10 минут
-
Ingalime отреагировална Nick Peterson в Постоянная потеря фокуса под Wine
Было похожее, правда только с окном в состоянии fsStayOnTop
Временно решил так, пока разбираюсь с более серьёзными глюками платформы))
procedure TPumpHelper.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Single); begin If Visible and not Active then Show; end;
-
Ingalime отреагировална Tumaso в В 10.2 работает, а в RIO зависает при присвоении медиа-файла
TMediaPlayer в android и ios вообще никогда стабильно не работал, и targetSDK тут даже не причем. Он кривой сам по себе изначально, смиритесь.
Стабильное решение медиаплейера есть в библиотеке alcinoe, но там поддерживается пока только tokyo, поддержка rio будет позже.
-
Ingalime отреагировална Yarpda в В 10.2 работает, а в RIO зависает при присвоении медиа-файла
Нет, там права ни при чем. Даже внутренние файлы проекта (прописанные в деплоймент) под Адндроид перестает нормально играть, хотя и открывает. Но любая навигация, остановка и снова воспроизведение выдает невиданные глюки. (звуки задваиваются, видео то стоит то то вдруг начинает идти, потом просто вылетает приложение... Но связь четкая. Ставишь Tarket SDK 23 - нормально, ставишь 24 и выше - привет. ( это я еще на берлине заметил), а в RIO по умолчанию 26, там сразу что-попало...
-
-
Ingalime отреагировална sinuke в Вопросы о огромных списках со сложными элементами и картинками
я делал. просто чутка кода нужно, но все делается
Демо проектик: [Tokyo] LV_URL_Demo.zip
Нет. Не фреймы. ЛистВью - компонент, который рисует себя сам. Он не является контейнером для любых TControl. Поэтому придется самому все рисовать. Лично я "рисую" все кодом. Долговато в реализации, в начале не понятно как делать, но если разобраться, то сразу будет видна разница в скорости работы. ЛистВью очень шустрый компонент. Единственное, я не реализовывал поджинацию, но знаю что ее не так уж и сложно сделать на основе ЛистВью
-
Ingalime отреагировална sinuke в TTouchAnimation
Не знаю как задать свою картинку, но я менял изображения стандартного стиля и изображение анимации расположено примерно здесь (если не изменяет мне память):
-
Ingalime отреагировална Александр Жевлаков в Share картинок с targetAPI 24 и выше
Не знаю поможет ли это в решении конкретно данной проблемы, но вот на буржуйских просторах нашел общее решение
перевода программ, написанных в Delphi для Android с поддержкой API 26.
Который она "искаропки" не поддерживает. ?
Перевод дельфи приложений на API 26, часть первая
Перевод дельфи приложений на API 26, продолжение
Вроде во второй части есть что-то про = Accessing “external” URIs =.
Сам еще не пробовал, пока только начал разбираться.
-
Ingalime отреагировална AngryOwl в TLang + TEdit.TextPrompt?
Добрый!
Никак. Как и многие другие элементы...
Решение, до сих пор, - создание своего компонента или модуля для мультиязычных приложений.
Пример - Мультиязычность в андроиде.
Код, конечно, давно изменился и оптимизировался не раз. Если будет свободное время - выложу как-нибудь последнюю версию.
-
Ingalime отреагировална ra.eremeev в XCode версия
Рутрекер не фейковый - это одно из зеркал. У меня работает именно оно. Ваша ссылка, к сожалению, недоступна
Про связку - поторопился. При сборке arm64 именно на этом SDK и не работает
Тот самый Linked Error 1.
Возвращаюсь в начало топика: есть ли решение по скрещиванию SDK старше 11 и Berlin?
-
Ingalime отреагировална Brovin Yaroslav в В Android TimeEdit не позволяет устанавливать секунды
через всплывающее окно не получится это сделать. Потому что сам андроид не дает такой возможности. А если использовать инплейс редактирование через клавиатуру, то просто задайти кастомный формат времени, в котором добавьте секунды.
-
-
Ingalime отреагировална Barbanel в Как в Delphi XE3 открыть word документ ?
if ( OpenDialog1.Execute ) then
Memo1.lines.LoadFromFile(OpenDialog1.FileName);
Выражайтесь точнее)
-
Ingalime отреагировална Камышев Александр в Использование TClientSocket (old school )
Задача поднять старый (теплый ламповый) проект CBuilder 6 под Виндовс в RAD Studio.
Просто открыл файл проекта, практически все подтянулось с небольшими изменениями в путях include. Кроме TClientSocket, нет такого визуального компонента.
Компонента нет, но библиотеки в RAD Studio оставили. Подключил #include <ScktComp.hpp>, создал динамически TClientSocket, определил события - проект поднялся малой кровью.
#include <ScktComp.hpp> TClientSocket *сlient = new TClientSocket(NULL); сlient->OnConnect = ClientConnect; сlient->OnDisconnect = ClientDisconnect; сlient->OnError = ClientError; сlient->OnRead = ClientRead; Аналогично можно пользоваться TServerSocket. Может кому пригодится.
-
Ingalime отреагировална Ильдар в Как изменить цвет Label?
self.Label1.StyledSettings:= self.Label1.StyledSettings - [TStyledSetting.FontColor]; self.Label1.FontColor:= TAlphaColorrec.Red; Можно просто отключить стилизацию.
-
Ingalime отреагировална dnekrasov в Как изменить цвет Label?
В FMX у TLabel нет свойства Color. В стандартных стилях у TLabel прозрачный фон, поэтому надо или сделать свой стиль или расположить ваш Label поверх TRectangle, TColorBox ну или что-то похожее.
-
Ingalime отреагировална ENERGY в XCode версия
А SDK iOS точно 11.x выбрано? А Xcode какой? При билде не возникает ошибка Linker Error 1 или т.п. ?
Кстати, ссылка у вас на какой то фейковый рутрекер. Вот тот же релиз на оригинальном рутрекере.
https://rutracker.org/forum/viewtopic.php?t=5461837
-
Ingalime отреагировална ra.eremeev в XCode версия
Доброго времени суток!
Может кому пригодится: конфигурация Berlin отлично работает с MacOS High Sierra + SKD 11
Виртуалка для Hight Sierra доступна по ссылке
-
Ingalime отреагировална x11 в Embarcadero.... Community Edition!
Настройка Delphi Community Edition для разработки под Android
https://www.youtube.com/watch?v=_DXtU_8QdVE