我发现用DELPHI写的程序即使是仅建立一个窗体,别的什么控件没有,什么代码也没有过,运行时用进程管理器查看内存占用也要有1.5M-2M之间。
问题一:我去掉所有窗体,仅在工程文件 Project1.DPR中写入很简单的代码;
uses windows;
{$R *.res}
begin
while true do;
end.
但结果这样的程序运行时仍占用1M多的内存?但我在进程管理器中看别的程序,有占用只有几百K的。
为什么这样简单的程序也占用这么多内存呢?问题二:上述有一个简单窗体的程序,虽然占用有1M多内存,但若是我点一下最小化,这时内存占用立即变成300多K,小了很多,即使再还原窗口,内存占用也不过400多K左右。
最小化一次,为什么就可以减少内存占用呢?还有我发现若是自己在代码中使用Form1.Hide或设置窗体最小化,却不能减少内存占用。只有用application最小化才有用。问题三:一个程序包括窗体,我以前用即用即建立窗体,用完立即Free或destroy,但观察内存,发现并没有什么明显变化,一般就是只增加,即不见减少。
如果我用delphi写程序,想尽量减少内存占用有何方法?
问题一:我去掉所有窗体,仅在工程文件 Project1.DPR中写入很简单的代码;
uses windows;
{$R *.res}
begin
while true do;
end.
但结果这样的程序运行时仍占用1M多的内存?但我在进程管理器中看别的程序,有占用只有几百K的。
为什么这样简单的程序也占用这么多内存呢?问题二:上述有一个简单窗体的程序,虽然占用有1M多内存,但若是我点一下最小化,这时内存占用立即变成300多K,小了很多,即使再还原窗口,内存占用也不过400多K左右。
最小化一次,为什么就可以减少内存占用呢?还有我发现若是自己在代码中使用Form1.Hide或设置窗体最小化,却不能减少内存占用。只有用application最小化才有用。问题三:一个程序包括窗体,我以前用即用即建立窗体,用完立即Free或destroy,但观察内存,发现并没有什么明显变化,一般就是只增加,即不见减少。
如果我用delphi写程序,想尽量减少内存占用有何方法?
解决方案 »
- FASTREPORT4 人民币大写转合计函数时出错.
- 【请教】为什么在ACCESS中能执行,在ADOQUERY 中提示出错?
- 帮忙写个银行账户类,感激~~~
- 如何加密INI文件中的密码!
- 简单问题~!
- adodataset.next的小问题,或许很easy,或许很难,反正我不会,请教ing
- sql语句的问题
- DELPHI6的ADOQuery控件,如果在filter(过滤)中同时使用了and和or就会报错.为什么?
- 怎样把一个字符串加入到MessageBox的提示语句中?
- word 文档的 换页 问题
- 求使用ADO连接ACCESS的详细方法,救急~
- 那位前辈知道免费grid组件下载网址? 急!急!急!急!急!急!急!
2、任何Delphi程序都至少必须调用Vcl70.bpl(1.32M),如果是动态编译还至少要装载rtl70.bpl(760K)。
3、建议使用LoadPackage、GetProcAddress和UnloadPackage等函数动态加载包的方式开发大、中型程序。
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);
2004.11.30
wr960204 武稀松(王锐)
}
这个是原作者,
我现在在程序里面加了这一段,原来占几十M 的现在都在 5M 以下了 ^_^
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);
================================================================
谢谢了~~
在DELPHI中类都是从TOBJECT继承下来的~
想要一个干净的类都难啊~
一个窗体,DELPHI帮你实现了很多东西了,所以要占那样的内存啊~