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;  

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Delphi获取Windows版本号、描述等信息,可获取到主版本号、次版本号、系统描述、系统平台、构建号等,相关代码如下:   //设置版本信息结构的大小    GetVersionEx(OSVI);    //获取版本信息    is98orlater:=    //判断是否98或以后版本    (osvi.dwPlatformId=VER_PLATFORM_WIN32_WINDOWS) and    ((osvi.dwMajorVersion>4) or    ((osvi.dwMajorVersion=4) and (osvi.dwMinorVersion>0)));   //DOWNLOAD BY HTTP://WWW.CODEFANS.NET    //下面开始显示信息    case OSVI.dwPlatformId of    //根据OSVI.dwPlatformId的数值的不同显示具体的平台描述    VER_PLATFORM_WIN32s:    // Windows 3.1平台    s:='Windows 3.1';    VER_PLATFORM_WIN32_WINDOWS:    // Windows 95/98平台    if(is98orlater) then    //98    s:='Windows 98'    else    //95    s:='Windows 95';    VER_PLATFORM_WIN32_NT:    // Windows NT平台    s:='Windows NT/XP';    end;    Edit1.Text:=s;    Edit2.Text:=IntToStr(OSVI.dwMajorVersion);    Edit3.Text:=IntToStr(OSVI.dwMinorVersion);    case OSVI.dwPlatformId of    //根据平台的不同具体处理OSVI.dwBuildNumber信息    VER_PLATFORM_WIN32_WINDOWS:    // Windows 95/98平台则取OSVI.dwBuildNumber的低位字    Edit4.Text:=IntToStr(LOWORD(OSVI.dwBuildNumber));    VER_PLATFORM_WIN32_NT:    // Windows NT平台则取所有位的值    Edit4.Text:=IntToStr(OSVI.dwBuildNumber);    else    Edit4.Text:='';   // Windows 3.1平台此值位空    end;    Edit5.Text:=OSVI.szCSDVersion;   end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值