序:一直不敢用bds,特别是bds2007,为啥?慢啊,内存占用高啊,还没写几个字,内存就像股票一样地往上串,为了能真正用上bds2007,我放下手头的工作,在接下来的一段时间内,我下定决心好好整整bds,
Zjy,passion,俺现在做了一个查找bds实时创建内存的功能,用于调试bds第三方组件内存使用效率,争取将bds的占用内存降到最佳,如果有发现或怀疑有内存多余使用的地方,我会记下来,统一放在这个贴子内.烦请有空时检查.错误之外烦请批评指正.
以下内存的调式是直接在bds内调试生成,内存测量真实有效,调试内容除了cw外还有其它第三方组件及工具,我想对一般
使用bds的人员来说应是有所帮助的,至少还可以做到一定取舍。
(
注:下面报告是有选择性的,只是把一些太常用的控件或工具例出来)
1,CnInputSymbolList内 FProjectUnits,FSysUnits 两个TStringList不需要持久占用内存,因为 FCurrList的指计可以临时获得,TStringList创建又很快,另外这两个List使用频率不高,而用到时都会先clear,所以临时创建这两个List不需要考虑效率的问题,建议改成函数内临时变量,不使用时就free
2.我觉得Castalia是个鸡勒,下面是它常用的内存资源占用例子,
很多很大很天真!!! ,毫无节制,无法无天
,大大拖累bds效率
--------------------------------2008/5/11 1:46:31--------------------------------
Allocated block logged by LogAllocatedBlocksToFile. The size is: 327540//
这样的内存使用只要有1个我就受不了,但它使用的数量大大地超过我的想像,由于版面的需要,我只例举一个类似的例子,剩下的让你想像吧还在多少吧
Stack trace of when this block was allocated (return addresses):
D279F0 [BorlndMM.dpr][BorlndMM][BorlndMM.Finalization][123]
20003DEB [sys\system.pas][System][System.@ReallocMem][2762]
20008197 [sys\system.pas][System][System.@LStrSetLength][13776]
20007CF4 [sys\system.pas][System][System.@LStrCat][12866]
40525A4 [Castaliaeditor][GetSourceFromReader]
4052B00 [Castaliaeditor][GetSourceFromModule]
406C69E [Castaliacodeintf][CastaliaCodeServices]
406CEFD [Castaliacodeintf][CastaliaCodeServices]
406D1D7 [Castaliacodeintf][CastaliaCodeServices]
405460A [Castaliaeditor][GetSourceFromModule]
如果老大能在bds内实现画线的功能,我立马不用Castalia,因为除了画线的功能
,Castalia还有什么值得我喜爱的?
或者能有相应的方法,我宁可花段时间在cw内写一下相似的功能
3.CnPasCodeParser.pas内,这个Parser保存的Token的信息视pas文件大小而定,能否改成只取屏幕部分文字,我想这样高亮显示会快点?!
--------------------------------2008/5/11 6:14:21--------------------------------
Allocated block logged by LogAllocatedBlocksToFile. The size is: 42164
Stack trace of when this block was allocated (return addresses):
20003DAE [sys\system.pas][System][System.@GetMem][2654]
20007AA9 [sys\system.pas][System][System.@NewAnsiString][12429]
20007AD4 [sys\system.pas][System][System.@LStrFromPCharLen][12461]
5B997BE [Utils\CnPasCodeParser.pas][CnPasCodeParser][TCnPasStructureParser.ParseSource][301]
5C47628 [IdeEnhancements\CnSourceHighlight.pas][CnSourceHighlight][TBlockMatchInfo.CheckBlockMatch][304]
77D18C3E [KillTimer]
2010EA56 [ExtCtrls.pas][ExtCtrls][ExtCtrls.TTimer.UpdateTimer][2249]
5C4946C [IdeEnhancements\CnSourceHighlight.pas][CnSourceHighlight][TCnSourceHighlight.OnBlockTimer][1002]
2010EB0A [ExtCtrls.pas][ExtCtrls][ExtCtrls.TTimer.Timer][2281]
2010E9F0 [ExtCtrls.pas][ExtCtrls][ExtCtrls.TTimer.WndProc][2239]
The block is currently used for an object of class: Unknown
4.CnInputIdeSymbolList.pas内,这个TCnInputIdeSymbolList好像是临时取得的,加载到主List后,能否clear掉?
--------------------------------2008/5/11 8:00:44--------------------------------
Allocated block logged by LogAllocatedBlocksToFile. The size is: 90292
Stack trace of when this block was allocated (return addresses):
20003E1D [sys\system.pas][System][System.@ReallocMem][2786]
200098E7 [sys\system.pas][System][System.DynArraySetLength][16859]
200099BE [sys\system.pas][System][System.@DynArraySetLength][16907]
216C0569 [PasCodCmplt.pas][PasCodCmplt][PasCodCmplt.TSymbolList.GetValidSymbols][3290]
216B9882 [PasCodCmplt.pas][PasCodCmplt][PasCodCmplt.TPascalKibitzManager.InvokeCodeCompletion][703]
216B98BF [PasCodCmplt.pas][PasCodCmplt][PasCodCmplt.TPascalKibitzManager.InvokeCodeCompletion][710]
5C3D5EE [IdeEnhancements\CnInputIdeSymbolList.pas][CnInputIdeSymbolList][MyInvokeCodeCompletion][161]
5C3D611 [IdeEnhancements\CnInputIdeSymbolList.pas][CnInputIdeSymbolList][MyInvokeCodeCompletion][164]
5C3D820 [IdeEnhancements\CnInputIdeSymbolList.pas][CnInputIdeSymbolList][AddToSymbolList][225]
5C3D9BE [IdeEnhancements\CnInputIdeSymbolList.pas][CnInputIdeSymbolList][AddToSymbolList][257]
The block is currently used for an object of class: Unknown
5.MadException 在bds编译后,内存里放4-5个如此巨大的hash表,白白占用内存资源,严重拖累bds,他只管卖软件,至于客户(编程人员)能不能顺利用上bds好像不管他的事。
建议:卸载掉MadException(内存立马减少约50M)或者只有出调试版时才安装,下面调试信息是4-5个中的一个,
用了这么多大内存的hash表,简直变态
--------------------------------2008/5/11 10:29:57--------------------------------
Allocated block logged by LogAllocatedBlocksToFile. The size is: 83380
Stack trace of when this block was allocated (return addresses):
D279B0 [BorlndMM.dpr][BorlndMM][BorlndMM.Finalization][123]
20003DEB [sys\system.pas][System][System.@ReallocMem][2762]
200098E7 [sys\system.pas][System][System.DynArraySetLength][16859]
200099BE [sys\system.pas][System][System.@DynArraySetLength][16907]
5980300C [madMapFile][Public_NewItem]
20003DEB [sys\system.pas][System][System.@ReallocMem][2762]
598033EE [madMapFile][Public_ParseStr]
5980476D [madMapFile][ParseStr]
5980260B [madMapFile][LoadStrFromFile]
59802628 [madMapFile][LoadStrFromFile]
[
本帖最后由 niaoge 于 2008-5-11 11:47 编辑 ]