powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перевод приложения на мультиплатформенность.
25 сообщений из 68, страница 2 из 3
Перевод приложения на мультиплатформенность.
    #39337906
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rпопробовал отказаться от Memory mapped files в пользу обычного TFileStream - получил на винде при просчете маршрута замедление в три раза.Сейчас сам изучаю этот вопрос. Если общаться с TFileStream блоками по 8192 байт, то замедления нет
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39337940
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Если общаться с TFileStream блоками по 8192 байт, то замедления нет

....но тогда теряется и преимущество TFileStream перед MMF
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39337951
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Vizit0rпопробовал отказаться от Memory mapped files в пользу обычного TFileStream - получил на винде при просчете маршрута замедление в три раза.Сейчас сам изучаю этот вопрос. Если общаться с TFileStream блоками по 8192 байт, то замедления нет
Нет ли совпадения с размером кластера?

Может тогда проще написать наследника с буферизацией по размеру кластера?
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39337960
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch....но тогда теряется и преимущество TFileStream перед MMFНе теряется. Потребление памяти меньше
wadmanНет ли совпадения с размером кластера?Нет. Что удивительно. У меня максимальная скорость была на буфере 8К при кластере 4К.

Таки выложу я результаты своих изысканий. Ближе к вечеру
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39337968
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В дельфях нынче есть TBufferedFileStream.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39337971
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
До берлина он был TFDFileStream в FireDAC.Stan.Util.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39337972
Фотография wadman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatВ дельфях нынче есть TBufferedFileStream.
Размер буфера с потолка берет?
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39337974
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rgreatВ дельфях нынче есть TBufferedFileStream.XE3 - нет
rgreatДо берлина он был TFDFileStream в FireDAC.Stan.Util.FireDAC не покупали
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39337975
rgreat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Из конструктора. По дефолту 32768.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39338015
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у меня нет такого, что надо вычитывать большие файлы подряд. С этим я уж разобрался бы, читал бы большими кусками и все такое.

У меня обращение к кускам внутри больших файлов по конкретным адресам - 40 байт там, пару десятков байт там, сотня тут.

Примерно в таком формате:

Код: pascal
1.
2.
3.
4.
  TMapBlockArray = array[0..0] of TMapBlock;
  PMapBlockArray = ^TMapBlockArray;

  Block.MapBlock := @PMapBlockArray(mapStream.Memory)[Block.BlockID];



Код: pascal
1.
2.
3.
4.
5.
  TIndexRecordArray = array[0..0] of TIndexRecord;
  PIndexRecordArray = ^TIndexRecordArray;

  IndexRecord := PIndexRecordArray(StaIdxStream.Memory)[Block.BlockID];
  Block.StaticBlock := StaMulStream.Offset(IndexRecord.Offset);



Т.е. обращение к mapped файлу как к массиву.

Именно про эти два куска я писал, что менял их на TFileStream (Seek&Read) - и получил падение скорости в три раза.
Подозреваю что тут тот самый редкий случай, когда ММФ действительно нужно, и нормальной альтернативы нет.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39338082
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rу меня нет такого, что надо вычитывать большие файлы подряд.MMF именно это и делает выделяет буфер под весь файл (если Вы мапите сразу все), считывает файл в этот буфер и отдает его Вам
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39338217
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Vizit0rу меня нет такого, что надо вычитывать большие файлы подряд.MMF именно это и делает выделяет буфер под весь файл (если Вы мапите сразу все), считывает файл в этот буфер и отдает его Вам

почитал мсдн, подумал.

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

Там файлов, которые мапятся- в сумме на 500 мб и больше.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39342169
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
добрался домой, пришел в себя и занялся делом.

Сделал конвертирование из 15битного формата в полноценный FMX RGBA 32б. Андроид по традиции преподнес сюрпризов с отрисовкой.
Вот один из них:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
{$IFDEF HAS_FMX}
function Color16ToAlphaColor(C : Word) : TAlphaColor;
begin
  {$IFDEF ANDROID}
  TAlphaColorRec(Result).B := ((C shr 10) and $1F) * 8;
  TAlphaColorRec(Result).R :=  (C         and $1F) * 8;
  {$ELSE}
  TAlphaColorRec(Result).R := ((C shr 10) and $1F) * 8;
  TAlphaColorRec(Result).B :=  (C         and $1F) * 8;
  {$ENDIF}

  TAlphaColorRec(Result).G := ((C shr 5)  and $1F) * 8;
  TAlphaColorRec(Result).A := $FF;
end;
{$ENDIF}


Другой момент - это когда присваиваешь одному битмапу другой, потом на первом рисуешь Rect - а он в тех местах, где пиксели непрозрачные - не отрисовывается. Выкатил на fire-monkey.ru вопрос, может опытные люди подскажут.
Еще всякое-разное с андроидом было, с размерами TImage, выводом изображения на него и прочее.

По коду добавил кучу дефайнов, потому что неожиданно повсплывало в куче мест \ в конце\середине пути, да и вообще много где были прописаны абсолютные пути. Все это переносится на общие переменные.

posix-mmf работает, но пока проверял только на единичных обращениях к файлу, на днях начну полноценный тест сложных систем типа поиска пути, там как раз это все будет - и нагрузка на процессор, и обращение к файлам.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39342173
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл упомянуть еще момент.
Tbitmap -
задаешь размеры, затем
Result.Map(TMapAccess.Write,BitmapData);
затем в цикле
P := BitmapData.GetScanline(Y);
и заполняешь только те пиксели, которые используются.
И получаешь сюрприз, что в незаполненных пикселях мусор. И пофиг, что сразу после задавания размера ты делал
Result.Canvas.Clear(TAlphaColorRec.Null);

Зло где-то в районе Result.Map, я не копал глубоко, да и конкретное место неинтересно.

Приходится в каждой итерации делать

P := BitmapData.GetScanline(Y);
FillChar(PCardinalArray(P)[X], Width * SizeOf(TAlphaColor), 0);
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39342272
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r,

Там по-старинке FillRect не работает?
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39342282
Sapersky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Vizit0rИ получаешь сюрприз, что в незаполненных пикселях мусор.
Похоже, это такая оптимизация, FM в режиме "только запись" не гоняет картинку из видеопамяти, считая, что она всё равно будет полностью перезаписана.
Можно использовать TMapAccess.ReadWrite, хотя очистить картинку FillChar-ом наверняка будет быстрее.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39342330
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SaperskyVizit0rИ получаешь сюрприз, что в незаполненных пикселях мусор.
Похоже, это такая оптимизация, FM в режиме "только запись" не гоняет картинку из видеопамяти, считая, что она всё равно будет полностью перезаписана.
Можно использовать TMapAccess.ReadWrite, хотя очистить картинку FillChar-ом наверняка будет быстрее.

это логично, и это первое о чем я подумал.
Только вот....
Код: pascal
1.
2.
3.
    {$IFDEF HAS_FMX}
    Result.Map(TMapAccess.ReadWrite,BitmapData);
    {$ENDIF}




:)

авторТам по-старинке FillRect не работает?
там по-старинке почти ничего не работает, все изменено. Но более-менее логично, примеры и справка + чтение FMX сурсов нормально помогают.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39344654
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может кто-то в курсе - есть ли какая-то возможность под андроид получить инфу о memory corruption ДО того как андроид вышибает со стеком, в котором фигурирует :F6EAF8AC __bionic_heap_corruption_error и прочее такого плана?
Overflow checking + Range checking не помогает.
Ошибка повторяема, проблема где-то в дельфо-андроидных конвертациях PAX'а больших структур (> 4б) при вызове из скрипта внутреннего метода приложения. Знаний, чтобы понять что там не так - явно не хватает. Если проблему структуры размером 3б я решил по аналогии с проблемами структур пакса еще для винды, то в случае большой структуры так уже не катит. Там вовсю работают конструкторы-деструкторы, фиг поймешь что и где не так.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39344877
Фотография Квейд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rДва скрина - вин и андроид.
Эти цветные полоски убивают тонну времени - я часа два потратил на то, чтобы правильно подобрать их положение. И то не до конца, но это уже мелочи. Да и цвета явно не те, что должны быть - виндовые цвета на андроиде извратились до совершенно других. Пока взял Red Blue Green, потом подберу покрасивее.





Бывший GM Quaid с Age of Power приветствует тебя :)
Я написал первую в мире "ходилку" под Стелс, в 2006 году.
Смотрю, клиент сильно изменился с тех пор.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Перевод приложения на мультиплатформенность.
    #39567215
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На этой неделе было время свободное, занялся андроидной версией.


1)с удивлением узнал, что в стандарном сете иконок для андроида нет сохранения. вообще. Что-то похожее еще примерно похожее на открыть есть, а для сохранения нет.
Нашел в полном наборе materials ( https://material.io/icons) иконку сохранения, попробую ее на досуге впилить в стиль.

2) Долго ругался на вызов файлдиалога. Благодаря тому, что с какой-то версии FMX не поддерживает ModalWidows, все действия после вызова файлдиалога пришлось переносить в коллбеки. Особенно классно выглядит это, когда в одной цепочке может быть несколько вызовов файлдиалога, например при открытии файла запрос на сохранение измененного с файлдиалогом для выбора куда сохранить, а потом за ним опендиалог.

3) на удивление легко и правильно завелись Notifications. Неожиданно.

4) поимел вдоволь секса с попыткой сделать редактирование в android-style, когда при редактировании строки или поля оно взлетает наверх, чтобы было видно при открытой виртклаве. Так вот, сделать это легко и просто получается только для TEdit. Для TMemo - все сложно, оно-то наверх прыгает, но при этом верхняя часть уходит за экран. Долго и нудно возился, пока не сделал в лоб - при показе VK меняю layout с tmemo стиль alTop и выставляю нужный Height.
Пробовал и примеры из дельфийского набора, и vkbdhelper.

5) довеском про tmemo - большие проблемы с лонг-тапом и тем, что из него вытекает. Меню показывается, но если нажать на кнопку в появившемся меню или попытаться изменить область выделения - отличный шанс вылететь с невнятной ошибкой в потрохах переходников явы. Пришлось отключить LongTap, но все равно при желании можно получить краш. Что-то там сильно неладно в потрохах. Надо спросить на fire-monkey.ru, может у кого есть решение.

6) андроид 8 походу еще не поддерживается - приложение деплоится, работает нормально, но при этом среда виснет на Launching Application. Т.е. отлаживать на 8 дроиде не получится.



P.S. Кстати, после покупки нового домашнего компа с i5 на борту - компиляция под андроид перестала быть чем-то смертельным, когда можно ставить на компиляцию и уходить кушать, курить и пить кофе. Ощутимо дольше, чем VCL, но уже можно жить. Тот случай, когда проц действительно имеет значение. Знал бы, что будет такой эффект - может и на i7 бы разорился.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39567277
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0r...после покупки нового домашнего компа с i5 на борту...
Небось и памяти не меньше 4х гигов натолкал, буржуй?
...что же у тебя в старом компе было?
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39567359
Vizit0r
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
по нынешним временам мало - всего 8 гб. Но я в игры не играю, мне больше точно не надо.

А до этого был какой-то целерон убогий и 2 гб памяти. Старый комп тогда сгорел, денег небыло, пришлось покупать все самое дешевое. Ноут быстрее работал, чет это убожество.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39567367
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччДVizit0r...после покупки нового домашнего компа с i5 на борту...
Небось и памяти не меньше 4х гигов натолкал, буржуй?
...что же у тебя в старом компе было?
Шутки шутками, но, например, топовые i5 последнего поколения чуть-ли не в два раза быстрее моего i7 второго поколения (2600), при этом они в ~2 (и более) раза дешевле современных i7 (в зависимости от модели).
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39567368
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rпо нынешним временам мало - всего 8 гб. Но я в игры не играю, мне больше точно не надо.
Как раз играм-то 8 за глаза, а вот чтобы пару виртуалок одновременно крутить - желательно уже минимум 16. Хотя у всех свои задачи.
...
Рейтинг: 0 / 0
Перевод приложения на мультиплатформенность.
    #39567376
чччД
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vizit0rпо нынешним временам мало - всего 8 гб. Но я в игры не играю, мне больше точно не надо.

А до этого был какой-то целерон убогий и 2 гб памяти. Старый комп тогда сгорел, денег небыло, пришлось покупать все самое дешевое. Ноут быстрее работал, чет это убожество.

Все правильно. Комп разработчика должен быть говенным: если софтоизделие запустилось, значит, на нормально компе точно работать будет.
...
Рейтинг: 0 / 0
25 сообщений из 68, страница 2 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перевод приложения на мультиплатформенность.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]