Delphi结构中使用String时遇到的内存泄露问题
2011-12-23 10:58
344 查看
先定义一个结构:
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;
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;
相关文章推荐
- Delphi结构中使用String时遇到的内存泄露问题(没有利用String的引用计数自动销毁字符串的功能)
- Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
- Delphi中复制带有String的记录结构时不能使用Move之类的内存操作函数
- Rxlifecycle使用详解,解决RxJava内存泄露问题
- 使用valgrind检测内存泄露的问题。
- NSMutableArray使用中遇到的内存问题
- 记同事处理Fedora6 下使用超过4G的内存中所遇到的问题
- Android使用Handler造成的内存泄露问题的解决
- Mysql: Connect/C++ 使用过程中发现返回 std::string 造成的内存泄露
- Android中Handler使用不当导致内存泄露的问题
- Android 性能优化之使用MAT分析内存泄露问题
- 使用按键精灵+umdh定位内存泄露问题的方式
- Android 性能优化之使用MAT分析内存泄露问题
- delphi的日志组件log4d的内存泄露问题
- Rxlifecycle使用详解,解决RxJava内存泄露问题
- Delphi的内存管理及内存泄露问题
- 使用Canvas、Bitmap时易犯的内存泄露问题
- 使用SDWebimage加载高清大图遇到内存警告的问题
- Android 开发使用MVP产生的内存泄露问题
- 使用stringRedisTemplate操作redis hash结构数据只能存储String类型的问题