首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET >

请教一个Tstringlist内存分配有关问题

2012-03-20 
请问一个Tstringlist内存分配问题我在一个TIMER中每秒执行50次a.add(111)//a是一个Tstringlist为啥程序

请问一个Tstringlist内存分配问题
我在一个TIMER中每秒执行50次a.add('111');//a是一个Tstringlist

为啥程序在10分钟以后内存占用增加500kb以上,照道理应该没有这么多内存占用的,这是什么原因?怎样避免?还是就是应该增加这么多占用呢?

[解决办法]
delphi的内存释放不是把内存返回给系统,而是标记为可用,下次申请时继续使用,所以你会感觉申请的内存不断的增大
[解决办法]
一方面 Delphi的内存管理器不会立刻回收,而是有自己的调度规则.
另一方面,新的内存块未必就是你给他那么大,他有一个对齐方式.比如4KB对齐.你不停的分配,实际上会产生比较多的碎块.
还有内存管理器管理的时候每个内存块都会有一个描述信息.Delphi的默认是用链表管理的.大量的小块数据就会产生比较多的链表节点,每个节点再有一点描述信息.当然会大.VC一般是放在负偏移有一个描述块,结果是一样的.

热点排行