Delphi中如何释放内存(转)

 Delphi中如何释放内存(
觉得写得不错,记录一下!


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

有人写了一个清内存的bpl插件,据他讲用了以后Delphi2005只占34兆内存,多次编译后占用内存不会递增,其实这个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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值