怎样释放StringList占用的内存 ( 积分: 100 )

  • 主题发起人 主题发起人 aizuodream
  • 开始时间 开始时间
A

aizuodream

Unregistered / Unconfirmed
GUEST, unregistred user!
我想通过编程把IIS日志读进Sql server 2005的一个表里面去.
StrLst:=TStringList.Create;
StrLst.LoadFromFile(logfile);
然后一行行的从StrLst把日志读出来,给表里的字段赋值.
因为日志文件很大,所以程序运行时内存随着时间增加的很快.
有没有办法在读下一行如StrLst[10]时,把前面一行StrLst[9]所占用的内存释放掉呢.
不能把整个StrLst释放,因为后面还要用到.
 
delete掉,不过哪样后面的编号会自动往前移,比如你delete掉9,那么10的编号就变成9了
 
照着队列的操作方法,读掉队首后就删除掉
 
试试
procedure Readln([ var F: Text; ] V1 [, V2, ...,Vn ]);

如果文本很有规律,sql server 的bcp命令工具蛮不错的
bcp "Northwind.[Jane Doe].[Jane's Orders]" out "Jane's Orders.txt" -c -U"Jane Doe" -P"go dba"
 
"因为日志文件很大,所以程序运行时内存随着时间增加的很快."----这个和TStringList无关,因为TStringList的LoadFromFile是一次性把所有的东西都载入内存的,所以他会在一开始就占用所需的内存(如果文件很大的话,使用TStringList的LoadFromFile会导致程序失去响应一段时间),而不会"内存随着时间增加的很快".

建议:
1 检查你的程序,找到导致内存随时间增长的真正原因;
2 对于打开大的行文本文件,应该使用那年黄梅花开的方法;
3 如果数据都是固定长度的话,建议使用文件流打开,然后用记录方式读取.
 
后退
顶部