Delphi 释放内存

来源:互联网 发布:怎么制作mac系统u盘 编辑:程序博客网 时间:2024/04/28 10:26
 

方法一:如何利用Delphi释放所占的内存

有人写了一个清内存的bpl插件,据他讲用了以后Delphi2005只占3、4兆内存,多次编译后占用内存不会递增,其实这个bpl只有一个pas文件,这个文件里主要的就是一个函数,如有兴趣你看看:{2004.11.30wr960204 武稀松(王锐)}unit UnitMMSave;

interface

usesClasses, Windows, SysUtils, StrUtils, ExtCtrls, Forms,Dialogs;

implementation

constFrequency = 5000;//每隔五秒钟整理一次内存,速度很快的 :)varTimerID: Integer;InProc: Boolean;

procedure SaveMemory;beginif Win32Platform = VER_PLATFORM_WIN32_NT thenbegin //整理内存SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);end;end;

//定时器要执行的回调函数procedure HearBeatProc(Wnd: HWnd; Msg, Event, dwTime: Integer); stdcall;beginif (InProc = False) thenbeginInProc := True;trySaveMemory;finallyInProc := False;end;end;end;

initializationSetTimer(0, 0, Frequency, @HearBeatProc); //创建一个定时器finalizationKillTimer(0, TimerID);end.

方法二:用Delphi线程实现对内存的清理{*******************************************************}{       清理内存线程                                    }{       Thtml                                           }{                                                       }{       Copyright (c) 2006 Inprise Corporation          }{       编写人:韩飞                                    }{       编写日期:2006-09-28                            }{       更新日期:2006-10-21 13:21                       }{*******************************************************}unit ClearMemoryThread;

interfaceuses      Classes,SysUtils,Forms,Windows;   type      TClearMemory = Class(TThread)   private

   protected     procedure Execute;Override;   public     Constructor Create(Suspended:Boolean);

   end;implementation

procedure ClearMemory;//清理内存beginif Win32Platform = VER_PLATFORM_WIN32_NT thenbegin    SetProcessWorkingSetSize(GetCurrentProcess, $FFFFFFFF, $FFFFFFFF);    Application.ProcessMessages;end;end;Constructor TClearMemory.Create(Suspended:Boolean);//创建线程Begininherited Create(Suspended);FreeOnTerminate:=True;End;

Procedure TClearMemory.Execute;//线程启动beginClearMemory;End;

end.

调用如下:

procedure TfrmMain.Timer1Timer(Sender: TObject);varClearMemoryThread: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; 

原创粉丝点击