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: Как воссоздать:

  1. Запустите новое приложение для нескольких устройств.
  2. Выберите пустое приложение.
  3. Брось TTimer.
  4. Бросьте прямоугольник.
  5. Добавьте логическую открытую переменную "up".
  6. Для 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;

Просто как тот.

Обратите внимание, что у этого есть другие побочные эффекты: в моем случае я использовал шрифты со спецификациями размера по умолчанию, которые хорошо масштабировались, когда это было ложно, и становились ультра размытыми, когда это было правдой. (Я только увеличил шрифты, но уверен, что это не единственный эффект установки этого.)

Другие вопросы по тегам