Delphi中如何释放内存(转)
2008-09-25 10:08
393 查看
Delphi中如何释放内存(转)
觉得写得不错,记录一下!
方法一:如何利用Delphi释放所占的内存
有人写了一个清内存的bpl插件,据他讲用了以后Delphi2005只占3、4兆内存,多次编译后占用内存不会递增,其实这个bpl只有一个pas文件,这个文件里主要的就是一个函数,如有兴趣你看看:
{
2004.11.30
wr960204 武稀松(王锐)
}
unit UnitMMSave;
interface
uses
Classes, Windows, SysUtils, StrUtils, ExtCtrls, Forms,
Dialogs;
implementation
const
Frequency = 5000;//每隔五秒钟整理一次内存,速度很快的 :)
var
TimerID: Integer;
InProc: Boolean;
procedure SaveMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin //整理内存
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;
end;
//定时器要执行的回调函数
procedure HearBeatProc(Wnd: HWnd; Msg, Event, dwTime: Integer); stdcall;
begin
if (InProc = False) then
begin
InProc := True;
try
SaveMemory;
finally
InProc := False;
end;
end;
end;
initialization
SetTimer(0, 0, Frequency, @HearBeatProc); //创建一个定时器
finalization
KillTimer(0, TimerID);
end.
方法二:用Delphi线程实现对内存的清理
{*******************************************************}
{ 清理内存线程 }
{ Thtml }
{ }
{ Copyright (c) 2006 Inprise Corporation }
{ 编写人:韩飞 }
{ 编写日期:2006-09-28 }
{ 更新日期:2006-10-21 13:21 }
{*******************************************************}
unit ClearMemoryThread;
interface
uses
Classes,SysUtils,Forms,Windows;
type
TClearMemory = Class(TThread)
private
protected
procedure Execute;Override;
public
Constructor Create(Suspended:Boolean);
end;
implementation
procedure ClearMemory;//清理内存
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
Application.ProcessMessages;
end;
end;
Constructor TClearMemory.Create(Suspended:Boolean);//创建线程
Begin
inherited Create(Suspended);
FreeOnTerminate:=True;
End;
Procedure TClearMemory.Execute;//线程启动
begin
ClearMemory;
End;
end.
调用如下:
procedure TfrmMain.Timer1Timer(Sender: TObject);
var
ClearMemoryThread:TClearMemory;
begin
ClearMemoryThread := TClearMemory.Create(False);
end;
方法三:DELPHI清理释放内存小代码
在WinXp,Win2K中应用此方法,不显示主窗体一直运行的程序最佳。以前程序占用11M内存,我用动态创建窗口的方法只能减少不到100K,应用此方法后内存占用只有496K。把下面的过程放到一个Timer中,每隔一段时间执行一次,如5秒。
{
************************************
* Clear Memory
* From Muse2008
************************************
}
procedure ClearMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
application.ProcessMessages;
end;
end;
转载自:http://hi.baidu.com/netplaier/blog/item/2930531e690f69f01ad5766f.html
觉得写得不错,记录一下!
方法一:如何利用Delphi释放所占的内存
有人写了一个清内存的bpl插件,据他讲用了以后Delphi2005只占3、4兆内存,多次编译后占用内存不会递增,其实这个bpl只有一个pas文件,这个文件里主要的就是一个函数,如有兴趣你看看:
{
2004.11.30
wr960204 武稀松(王锐)
}
unit UnitMMSave;
interface
uses
Classes, Windows, SysUtils, StrUtils, ExtCtrls, Forms,
Dialogs;
implementation
const
Frequency = 5000;//每隔五秒钟整理一次内存,速度很快的 :)
var
TimerID: Integer;
InProc: Boolean;
procedure SaveMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin //整理内存
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
end;
end;
//定时器要执行的回调函数
procedure HearBeatProc(Wnd: HWnd; Msg, Event, dwTime: Integer); stdcall;
begin
if (InProc = False) then
begin
InProc := True;
try
SaveMemory;
finally
InProc := False;
end;
end;
end;
initialization
SetTimer(0, 0, Frequency, @HearBeatProc); //创建一个定时器
finalization
KillTimer(0, TimerID);
end.
方法二:用Delphi线程实现对内存的清理
{*******************************************************}
{ 清理内存线程 }
{ Thtml }
{ }
{ Copyright (c) 2006 Inprise Corporation }
{ 编写人:韩飞 }
{ 编写日期:2006-09-28 }
{ 更新日期:2006-10-21 13:21 }
{*******************************************************}
unit ClearMemoryThread;
interface
uses
Classes,SysUtils,Forms,Windows;
type
TClearMemory = Class(TThread)
private
protected
procedure Execute;Override;
public
Constructor Create(Suspended:Boolean);
end;
implementation
procedure ClearMemory;//清理内存
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
Application.ProcessMessages;
end;
end;
Constructor TClearMemory.Create(Suspended:Boolean);//创建线程
Begin
inherited Create(Suspended);
FreeOnTerminate:=True;
End;
Procedure TClearMemory.Execute;//线程启动
begin
ClearMemory;
End;
end.
调用如下:
procedure TfrmMain.Timer1Timer(Sender: TObject);
var
ClearMemoryThread:TClearMemory;
begin
ClearMemoryThread := TClearMemory.Create(False);
end;
方法三:DELPHI清理释放内存小代码
在WinXp,Win2K中应用此方法,不显示主窗体一直运行的程序最佳。以前程序占用11M内存,我用动态创建窗口的方法只能减少不到100K,应用此方法后内存占用只有496K。把下面的过程放到一个Timer中,每隔一段时间执行一次,如5秒。
{
************************************
* Clear Memory
* From Muse2008
************************************
}
procedure ClearMemory;
begin
if Win32Platform = VER_PLATFORM_WIN32_NT then
begin
SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);
application.ProcessMessages;
end;
end;
转载自:http://hi.baidu.com/netplaier/blog/item/2930531e690f69f01ad5766f.html
相关文章推荐
- Delphi中如何释放内存(转)
- 如何利用Delphi释放所占的内存
- delphi释放窗体后如何再次载入窗体
- 如何在Dll中分配内存,而在调用程序里释放
- Delphi 接口使用中,对象生命周期管理,如何释放需要注意的问题
- DELPHI清理释放内存小代码
- system verilog如何释放内存
- C++类中静态STL容器中的指针所指向的动态内存空间如何释放!
- 如何手工释放linux内存
- 嵌入式 如何手动释放Linux内存的方法
- Android学习之 如何提高Service的优先级、当系统释放更多内存时、防止Service进程被Kill掉
- 如何手工释放linux内存
- 如何 释放linux内存
- 如何安全释放内存—dealloc调用详解。
- 如何手动释放Python的内存
- cocos2dx切换场景如何释放内存
- 如何简化临时内存的分配与释放
- 如何释放linux cache占用的内存
- Delphi如何访问一个进程的内存空间
- Delphi的内存分配和释放