方法一:如何利用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;
Delphi 释放内存
最新推荐文章于 2024-06-05 08:13:30 发布