Firemonkey“无调试信息”

时间:2016-09-19 02:44:02

标签: delphi firemonkey direct3d delphi-10.1-berlin

当调试Firemonkey应用程序(一个弹跳球),大约一分钟左右进入球时,此消息开始倾注到EventLog:

模块加载:D3DCOMPILER_47.dll。没有调试信息。基地址:14D50000美元。处理bo.exe(13824) 线程开始:线程ID:14268。处理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)

最后两行将无限重复。

UPDATE#1(已编辑):我不是要尝试调试D3DCompiler。我试图找出减速的​​原因。

更新#2:我关闭了模块的调试器消息,这没有帮助。在相同的近似点,应用程序的速度急剧下降。这只在调试时发生。

更新#3:如何重新创建:

  1. 启动新的多设备应用程序。
  2. 选择空白应用程序。
  3. 放弃一个TTimer。
  4. 删除一个TRectangle。
  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;

  7. 将TTimer Interval设置为低。在我的机器上我可以产生效果 间隔高达60左右。这是我能够做到的那么小,同时仍然让前面提到的调试器磨损。

1 个答案:

答案 0 :(得分:1)

所以,Embarcadero董事会上的Firemonkey大师Eli M给了我这个答案,我在这里为未来的人发帖:

FMX.Types.GlobalUseGPUCanvas := True;

这很简单。

N.B。这有其他的副作用:在我的情况下,我一直在使用默认大小规格的字体,当这是错误时缩放得很好,并且当这是真的时,它变得非常模糊。 (我只是把字体做得更大但我确定这不是设置它的唯一效果。)