Firemonkey "No Debug Info"
При отладке приложения Firemonkey (прыгающий шар), примерно через минуту после движения шарика, это сообщение начинает выливаться в EventLog:
Загрузка модуля: D3DCOMPILER_47.dll. Нет отладочной информации. Базовый адрес: $14 50000. Process bo.exe (13824) Начало потока: Идентификатор потока: 14268. Process bo.exe (13824)
Это делает режим отладки почти бесполезным. Это пробная версия Delphi Architect, пустое приложение Firemonkey. Я подумал, может быть, это из-за пробной версии.
Я вижу около трех потоков, начинающихся до того, как это произойдет. Я сознательно не запускаю никаких потоков, но я предполагаю, что один предназначен для пользовательского интерфейса, а другой - для отладчика? Я не знаю. Вот типичный образец:
Module Load: imagehlp.dll. No Debug Info. Base Address: $74A30000. Process bo.exe (19228)
Module Load: GPAPI.dll. No Debug Info. Base Address: $612D0000. Process bo.exe (19228)
Module Load: CRYPTNET.dll. No Debug Info. Base Address: $60900000. Process bo.exe (19228)
Module Load: IPHLPAPI.DLL. No Debug Info. Base Address: $739B0000. Process bo.exe (19228)
Module Load: WINNSI.DLL. No Debug Info. Base Address: $72B40000. Process bo.exe (19228)
Module Load: NSI.dll. No Debug Info. Base Address: $74940000. Process bo.exe (19228)
Module Load: ltc_game32.dll. No Debug Info. Base Address: $11D60000. Process bo.exe (19228)
Thread Start: Thread ID: 16400. Process bo.exe (19228)
Thread Start: Thread ID: 19268. Process bo.exe (19228)
Thread Start: Thread ID: 18640. Process bo.exe (19228)
Thread Exit: Thread ID: 16400. Process bo.exe (19228)
Thread Start: Thread ID: 6096. Process bo.exe (19228)
Module Load: D3DCOMPILER_47.dll. No Debug Info. Base Address: $14510000. Process bo.exe (19228)
Module Unload: D3DCOMPILER_47.dll. Process bo.exe (19228)
И последние две строки будут повторяться до бесконечности.
ОБНОВЛЕНИЕ № 1 (отредактировано): я не пытаюсь отладить D3DCompiler. Я пытаюсь найти причину замедления.
ОБНОВЛЕНИЕ № 2: Я отключил сообщения отладчика для модулей, и это не помогло. В той же приблизительной точке скорость приложения резко падает. Это происходит только во время отладки.
ОБНОВЛЕНИЕ № 3: Как воссоздать:
- Запустите новое приложение для нескольких устройств.
- Выберите пустое приложение.
- Брось TTimer.
- Бросьте прямоугольник.
- Добавьте логическую открытую переменную "up".
Для Timer1Timer добавьте следующий код:
procedure TForm1.Timer1Timer(Sender: TObject); begin if up then my := -1 else my := 1; if (Rectangle1.Position.Y + my < 10) or (Rectangle1.Position.Y + my > 470) then up := not up else Rectangle1.Position.Y := Rectangle1.Position.Y + my; end;
Установите интервал TTimer на что-то низкое. На моей машине я могу производить эффект с интервалом примерно до 60. Это так мало, как я смог сделать это, пока еще работал вышеупомянутый отладчик.
1 ответ
Итак, гуру Firemonkey Эли М на доске Embarcadero дал мне ответ на этот вопрос, который я публикую здесь для будущих людей:
FMX.Types.GlobalUseGPUCanvas := True;
Просто как тот.
Обратите внимание, что у этого есть другие побочные эффекты: в моем случае я использовал шрифты со спецификациями размера по умолчанию, которые хорошо масштабировались, когда это было ложно, и становились ультра размытыми, когда это было правдой. (Я только увеличил шрифты, но уверен, что это не единственный эффект установки этого.)