CnPack Forum


 
Subject: to Zjy, passion
niaoge
灌水司司长
Rank: 6Rank: 6



UID 9910
Digest Posts 0
Credits 438
Posts 143
点点分 438
Reading Access 10
Registered 2007-4-8
Status Offline
Post at 2008-5-10 15:47  Profile | Blog | P.M. 
to Zjy, passion

序:一直不敢用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 编辑 ]
Top
Passion (LiuXiao)
管理员
Rank: 9Rank: 9Rank: 9


UID 359
Digest Posts 19
Credits 6838
Posts 3591
点点分 6838
Reading Access 102
Registered 2004-3-28
Status Offline
Post at 2008-5-11 20:00  Profile | Blog | P.M. 
只根据屏幕内的代码是难以做到准确的代码语法分析的,所以CnPasCodeParser.pas内Parser保存的Token的信息必须从整个文件分析起,因而保存的Token也是整个文件的tokens。
Top
niaoge
灌水司司长
Rank: 6Rank: 6



UID 9910
Digest Posts 0
Credits 438
Posts 143
点点分 438
Reading Access 10
Registered 2007-4-8
Status Offline
Post at 2008-5-11 20:32  Profile | Blog | P.M. 


QUOTE:
原帖由 Passion 于 2008-5-11 20:00 发表
只根据屏幕内的代码是难以做到准确的代码语法分析的,所以CnPasCodeParser.pas内Parser保存的Token的信息必须从整个文件分析起,因而保存的Token也是整个文件的tokens。 ...

是否可以做到从屏上面最后一个funtion或procedure算起,至屏下面最早一个function或procedure之前结束?意思是只要能取到一个完整的信息,分析就会同样准确
Top
zjy
管理员
Rank: 9Rank: 9Rank: 9



UID 2
Digest Posts 6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
Post at 2008-5-11 20:39  Profile | Site | Blog | P.M. 
1,CnInputSymbolList内 FProjectUnits,FSysUnits 两个TStringList不需要持久占用内存,因为 FCurrList的指计可以临时获得,TStringList创建又很快,另外这两个List使用频率不高,而用到时都会先clear,所以临时创建这两个List不需要考虑效率的问题,建议改成函数内临时变量,不使用时就free

FProjectUnits,FSysUnits 这两个不是临时对象呢,只有当系统搜索路径或工程搜索路径变化时才会Clear掉重新添加,所以没办法转成函数内临时变量。




Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
zjy
管理员
Rank: 9Rank: 9Rank: 9



UID 2
Digest Posts 6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
Post at 2008-5-11 20:41  Profile | Site | Blog | P.M. 


QUOTE:
原帖由 niaoge 于 2008-5-11 20:32 发表

是否可以做到从屏上面最后一个funtion或procedure算起,至屏下面最早一个function或procedure之前结束?意思是只要能取到一个完整的信息,分析就会同样准确 ...

关键是如果不从文件头开始处理的话,如果遇到一大块代码都被注释掉这样的情况,就会出问题了。




Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
zjy
管理员
Rank: 9Rank: 9Rank: 9



UID 2
Digest Posts 6
Credits 2385
Posts 1543
点点分 2385
Reading Access 102
Registered 2002-12-16
Location China
Status Offline
Post at 2008-5-11 20:53  Profile | Site | Blog | P.M. 
4.CnInputIdeSymbolList.pas内,这个TCnInputIdeSymbolList好像是临时取得的,加载到主List后,能否clear掉?

TSymbolList 及其子类都是不能随便 Clear 的,因为 TSymbolList.FList 是一个保存 TSymbolItem 的 TObjectList,加载到主 List 的正是这些 TSymbolItem 对象,如果 Clear 掉就没办法显示列表项了。




Zhou JingYu
CnPack Administrator
http://www.cnpack.org/
Top
niaoge
灌水司司长
Rank: 6Rank: 6



UID 9910
Digest Posts 0
Credits 438
Posts 143
点点分 438
Reading Access 10
Registered 2007-4-8
Status Offline
Post at 2008-5-11 23:21  Profile | Blog | P.M. 


QUOTE:
原帖由 zjy 于 2008-5-11 20:53 发表
4.CnInputIdeSymbolList.pas内,这个TCnInputIdeSymbolList好像是临时取得的,加载到主List后,能否clear掉?

TSymbolList 及其子类都是不能随便 Clear 的,因为 TSymbolList.FList 是一个保存 TSymbolItem 的 TObjectList, ...

可以啊,我已改成临时变量,助手在uses 后面可以正常取到所有delphi路径下和工程路径下所有的单元名称
Top
niaoge
灌水司司长
Rank: 6Rank: 6



UID 9910
Digest Posts 0
Credits 438
Posts 143
点点分 438
Reading Access 10
Registered 2007-4-8
Status Offline
Post at 2008-5-11 23:35  Profile | Blog | P.M. 
我是先过滤查找10000字节以上的内存占用,
目前最大内存占用应是castalia,比较头痛,如果cw有画线的功能,我是坚决支持不用它
像Allocated block logged by LogAllocatedBlocksToFile. The size is: 327540,这个物理内存占用有320K,但是由于内存的实际占用反映的物理内存上可能是松散的,像数据库结构一样,所以实际占用可能以10位数相乘(这句话我不太确信,但是从把 castalia卸载掉后,从任务管理器上看,内存降了足足有50M)

[ 本帖最后由 niaoge 于 2008-5-11 23:38 编辑 ]
Top
 




All times are GMT++8, the time now is 2024-11-23 13:06

    本论坛支付平台由支付宝提供
携手打造安全诚信的交易社区 Powered by Discuz! 5.0.0  © 2001-2006 Comsenz Inc.
Processed in 0.015740 second(s), 7 queries , Gzip enabled

Clear Cookies - Contact Us - CnPack Website - Archiver - WAP