Delphi 11.1 FMX 中关闭时 TGPUObjectsPool 内存泄漏
TGPUObjectsPool memory leak on shutdown in Delphi 11.1 FMX
运行 11.1,我在 Windows 64 位(发布模式)下关闭一个简单的基本 FMX 2D 应用程序时收到此 TGPUObjectsPool
错误。第一次看到这个错误。
只需 运行在 project.dpr
中使用 ReportMemoryLeaksOnShutdown := True
填写空白表格会导致关闭时出现此错误。
TForm 上没有组件。只需 运行 并关闭。这让我想知道,如果一个基本的空项目可以因此类内存泄漏而关闭,那么 Delphi 发布会进行什么样的 QA。
有什么办法可以消除这个错误?
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:
9 - 24 bytes: TGPUObjectsPool x 1
89 - 104 bytes: TObjectDictionary<System.TClass,System.Generics.Collections.TObjectList<FMX.TextLayout.GPU.TReusableObject>> x 1
It makes me wonder what kind of QA is done for a Delphi release
实际上很多。数月的 Beta 测试、大量修复和内部构建。
这个问题实际上是在测试期间报告的,但只是在几周前,在最终版本修复时为时已晚。但是,在 11.1 发布后,已公开报告此泄漏(和其他泄漏):
RSP-37596 FMX TFontGlyphManager's UnInitialize not called in finalization
RSP-37600 Unexpected Memory Leak in TGPUObjectsPool
RSP-37613 Memory leak in an application that only serves forms
RSP-37656 Memory leak in FMX (simple project)
还有其他类似的内存泄漏(在 TFontGlyphManager
、TBehaviorServices
等),因此希望这会在下一次更新中得到修复。
I guess maybe they should consider having their samples include the ReportMemoryLeaksOnShutdown=True.
有趣,因为我也看到了类似的报告:
RSP-37598 Make RTL, FMX and VCL developers turn on memory leak checking by default
我修复了它(作为解决方法),包括 ShareMem 作为我项目源中使用的第一个单元。
试试这个:
uses
{$IFDEF VER350} // 11.x
FMX.FontGlyphs, FMX.TextLayout.GPU,
{$ENDIF}
finalization
{$IFDEF VER350} // 11.x
// RAD Studio 11 memory leak
TFontGlyphManager.UnInitialize;
TGPUObjectsPool.Uninitialize;
{$ENDIF}
运行 11.1,我在 Windows 64 位(发布模式)下关闭一个简单的基本 FMX 2D 应用程序时收到此 TGPUObjectsPool
错误。第一次看到这个错误。
只需 运行在 project.dpr
中使用 ReportMemoryLeaksOnShutdown := True
填写空白表格会导致关闭时出现此错误。
TForm 上没有组件。只需 运行 并关闭。这让我想知道,如果一个基本的空项目可以因此类内存泄漏而关闭,那么 Delphi 发布会进行什么样的 QA。
有什么办法可以消除这个错误?
---------------------------
Unexpected Memory Leak
---------------------------
An unexpected memory leak has occurred. The unexpected small block leaks are:
9 - 24 bytes: TGPUObjectsPool x 1
89 - 104 bytes: TObjectDictionary<System.TClass,System.Generics.Collections.TObjectList<FMX.TextLayout.GPU.TReusableObject>> x 1
It makes me wonder what kind of QA is done for a Delphi release
实际上很多。数月的 Beta 测试、大量修复和内部构建。
这个问题实际上是在测试期间报告的,但只是在几周前,在最终版本修复时为时已晚。但是,在 11.1 发布后,已公开报告此泄漏(和其他泄漏):
RSP-37596 FMX TFontGlyphManager's UnInitialize not called in finalization
RSP-37600 Unexpected Memory Leak in TGPUObjectsPool
RSP-37613 Memory leak in an application that only serves forms
RSP-37656 Memory leak in FMX (simple project)
还有其他类似的内存泄漏(在 TFontGlyphManager
、TBehaviorServices
等),因此希望这会在下一次更新中得到修复。
I guess maybe they should consider having their samples include the ReportMemoryLeaksOnShutdown=True.
有趣,因为我也看到了类似的报告:
RSP-37598 Make RTL, FMX and VCL developers turn on memory leak checking by default
我修复了它(作为解决方法),包括 ShareMem 作为我项目源中使用的第一个单元。
试试这个:
uses
{$IFDEF VER350} // 11.x
FMX.FontGlyphs, FMX.TextLayout.GPU,
{$ENDIF}
finalization
{$IFDEF VER350} // 11.x
// RAD Studio 11 memory leak
TFontGlyphManager.UnInitialize;
TGPUObjectsPool.Uninitialize;
{$ENDIF}