Delphi结构中使用String时遇到的内存泄露问题(没有利用String的引用计数自动销毁字符串的功能)

先定义一个结构:

TUserInfo = record
  UserID: Integer; // 用户编号
  UserName: string; // 用户名
end;

 

然后编写如下代码:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  User.UserName := StringOfChar('A', RandomRange(16*1024, 64*1024));
  FillChar(User, SizeOf(User), 0);
end;

 

然后开启设置Timer间隔为20ms, 开启任务管理器就会发现内存暴涨,很显然结构中UserName使用的内存未被正确释放。

 

改成下面的代码就不会出现上述情况:

procedure TForm1.Timer1Timer(Sender: TObject);
begin
  User.UserName := StringOfChar('A', RandomRange(16*1024, 64*1024));
  User.UserName := '';
end;

http://blog.csdn.net/missmecn/article/details/7097660

posted @ 2016-03-17 23:45  findumars  Views(778)  Comments(0Edit  收藏  举报