大佬教程收集整理的这篇文章主要介绍了Delphi/DBExpress导致内存泄漏,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
使用FastMM,我已经关注了内存使用情况的屏幕截图.我不完全确定如何读取该表,但看起来有些东西已经分配了296463552个字节(0x100fb000,这是“幻数”?)三次.
有任何想法吗?有没有办法跟踪非Delphi-MM内存分配?
我正在使用Delphi 2007和FastMM 4.96.
编辑:
我使用IMallocSpy编写了一个小助手类来跟踪COM内存分配.这是我得到的摘录:
00119023 5:52:27.484 [4496] TCOMAllocSpy.PreRealloc size: 269462304 00119024 5:52:27.734 [4496] (0002760C){ntdll.dll } [7C82860C] KiFastSystemCallRet + $0 00119025 5:52:27.734 [4496] (0009F83A){MyApp.exE} [004A083A] JclDebug.JclCreateThreadStackTrace (Line 3943,"JclDebug.pas" + 7) + $1E 00119026 5:52:27.734 [4496] (003D496A){MyApp.exE} [007D596A] ComLeakHelper.TCOMAllocSpy.DebugStack (Line 46,"ComLeakHelper.pas" + 2) + $9 00119027 5:52:27.734 [4496] (003D4B52){MyApp.exE} [007D5B52] ComLeakHelper.TCOMAllocSpy.PreRealloc (Line 125,"ComLeakHelper.pas" + 4) + $2 00119028 5:52:27.734 [4496] (000053B6){MyApp.exE} [004063B6] System.@WStrAsg (Line 14090,"sys\system.pas" + 10) + $0 00119029 5:52:27.734 [4496] (002E4490){MyApp.exE} [006E5490] DBXCommon.TDBXCommand.SetText (Line 5304,"..\..\..\..\..\src\pas\dbx\driver\DBXCommon.pas" + 13) + $5 00119030 5:52:27.734 [4496] (0010A340){MyApp.exE} [0050B340] WideStrings.TWideStrings.GetValue (Line 580,"common\WideStrings.pas" + 3) + $D 00119031 5:52:27.734 [4496] (002E1AFC){MyApp.exE} [006E2AFC] DBXCommon.TDBXProperties.GetValue (Line 4046,"..\..\..\..\..\src\pas\dbx\driver\DBXCommon.pas" + 1) + $7 00119032 5:52:27.734 [4496] (002E3FC9){MyApp.exE} [006E4FC9] DBXCommon.TDBXConnectionEx.GetProductName (Line 5071,"..\..\..\..\..\src\pas\dbx\driver\DBXCommon.pas" + 1) + $E 00119033 5:52:27.734 [4496] (003765FA){MyApp.exE} [007775FA] SqlExPR.TSQLConnection.DoConnect (@R_590_5450@67,"..\..\..\..\..\src\pas\dbx\vcl\SqlExPR.pas" + 66) + $21 00119034 5:52:27.734 [4496] (0011876D){MyApp.exE} [0051976D] DB.TCustomcatonnection.SetConnected (Line 2628,"DB.pas" + 8) + $4 00119035 5:52:27.734 [4496] (00118728){MyApp.exE} [00519728] DB.TCustomcatonnection.open (Line 2611,"DB.pas" + 0) + $4 00119036 5:52:27.734 [4496] (00375D6F){MyApp.exE} [00776D6F] SqlExPR.TSQLConnection.checkConnection (Line 2302,"..\..\..\..\..\src\pas\dbx\vcl\SqlExPR.pas" + 4) + $2 00119037 5:52:27.734 [4496] (00379241){MyApp.exE} [0077A241] SqlExPR.TCustomSQLDataSet.checkConnection (Line 3955,"..\..\..\..\..\src\pas\dbx\vcl\SqlExPR.pas" + 2) + $2 00119038 5:52:27.734 [4496] (0037968A){MyApp.exE} [0077A68A] SqlExPR.TCustomSQLDataSet.opencursor (Line 4045,"..\..\..\..\..\src\pas\dbx\vcl\SqlExPR.pas" + 3) + $4 00119039 5:52:27.734 [4496] (00125EA9){MyApp.exE} [00526EA9] DB.TDataSet.SetActive (Line 9245,"DB.pas" + 12) + $7 00119040 5:52:27.734 [4496] (00125CA1){MyApp.exE} [00526CA1] DB.TDataSet.open (Line 9201,"DB.pas" + 1) + $6 ...
所以,问题似乎是在数据库连接中.我正在使用来自Upscene的Firebird 2.1,DBExpress和InterXpress for Firebird驱动程序.
EDIT2:
这似乎分析了类似的问题,至少重点在于这里:http://www.yac.com.pl/mt.texts.sqlexpr-2.en.html
以上是大佬教程为你收集整理的Delphi/DBExpress导致内存泄漏全部内容,希望文章能够帮你解决Delphi/DBExpress导致内存泄漏所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。