社区
Delphi
帖子详情
程序怎么占内这么大.
綏子
2002-11-06 10:16:50
我做了个主窗体,放了一些图片(四十个图标),程序运行的时候占掉13%的内存。
我电脑是376M内存, 也没有包括很多的引用单元, 为什么占这么多内存,
有什么办法吗?
这些图标动态加载可以减少内存吗? 如果动态加载这些图标放先在哪里。
...全文
29
19
打赏
收藏
程序怎么占内这么大.
我做了个主窗体,放了一些图片(四十个图标),程序运行的时候占掉13%的内存。 我电脑是376M内存, 也没有包括很多的引用单元, 为什么占这么多内存, 有什么办法吗? 这些图标动态加载可以减少内存吗? 如果动态加载这些图标放先在哪里。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
19 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
zebi
2002-11-06
打赏
举报
回复
看看吧,可能对你有用
Dephi中资源文件的创建和使用
--------------------------------------------------------------------
几乎每个Windows应用程序都使用图标、图片、光标等资源。资源是程序的一部分,但是它是不可执行代码。下面我们就详细介绍资源文件在Delphi5中建立和使用方法。
1.把资源放到Exe文件的优点
由于定位资源比在磁盘中定位文件花费时间少,所以应用程序执行会更快。多种资源可以放在一个文件中,减少了图标、图片、光标等文件数量。保存资源文件时不要和工程名相同,因为Delphi创建工程时会自动创建一个和工程名相同的资源文件。并且最好将资源文件保存到和工程文件同一个文件夹中。
2.创建资源文件
首先创建一个.Rc的纯文本文件。格式如下:
资源标识符 + 关键字 + 资源文件名
① 资源标识符:程序中调用资源时的特殊标号;
② 关键字:标识资源文件类型;
Wave: 资源文件是声音文件;
RCDATA: JPEG文件;
AVI: AVI动画;
ICON: 图标文件;
BITMAP: 位图文件;
CURSOR: 光标文件;
资源文件名:资源文件名;
③ 资源文件名:编译的资源文件,比如动画、位图、光标等;
④ 如:MyWav WAVE "FileName.Wav"
使用Borland资源编译器(BRCC32.EXE)转化.Rc文件成.Res文件。在DOS命令行下输入下列命令:
Brcc32 FileName.Rc // Brcc32.Exe在Delphi5\Bin文件下。
3.在工程中引用资源文件
为了存取我们的资源文件,必须告诉Delphi链接我们的资源文件到应用程序中。因此我们可以在源代码中加入一条编译指令完成上述功能。这条指令必须紧跟在窗口指令后,如下形式:
{$R *.DFM} //Delphi自带编译指令
{$R FileName.Res} //新加入的编译资源文件的指令。
不要删除{$R *.DFM}指令,因为这行代码告诉Delphi链接下面的资源到窗口的资源中。
4.调用资源文件
(1)存取资源文件中的位图(Bitmap)
程序中如果想存取资源,你必须调用一些Windows API函数。保存在资源文件中的位图、光标和图标可以通过调用LoadBitmap、LoadCursor和LoadIcon函数存取。
本例举例说明如何存取资源文件中位图并显示在Timage控件中。
procedure TfrMain.btnCanvasPic(Sender: TObject);
Image1.Picture.Bitmap.Handle :=LoadBitmap(hInstance, '资源标识符');
end;
注:如果位图没有装载成功,程序仍旧执行,但是Image将不再显示图片。你可以根据LoadBitmap函数的返回值判断是否装载成功,如果装载成功返回值是非0,如果装载失败返回值是0。
另外一个存取显示位图的方法如下
procedure TfrMain.btnLoadPicClick(Sender: TObject);
begin
Image1.Picture.Bitmap.LoadFromResourceName(hInstance, '资源标识符');
end;
(2)存取资源文件中的光标
Screen.Cursors[]是一个光标数组,使用光标文件我们可以将定制的光标加入到这个属性中。因为默认的光标在数组中索引值是0,所以除非想取代默认光标,最好将定制的光标索引值设为1。
procedure TfrMain.btnUseCursorClick(Sender: TObject);
begin
Screen.Cursors[1] :=LoadCursor(hInstance,'资源标识符');
Image1.Cursor :=1;
end;
(3)存取资源文件中的图标
将图标放在资源文件中,可以实现动态改变应用程序图标。
procedure TfrMain.LoadIconClick(Sender: TObject);
begin
Application.Icon.Handle := LoadIcon(hInstance, '资源标识符');
End;
(4)存取资源文件中的AVI
procedure TfrMain.LoadIconClick(Sender: TObject);
begin
Animate1.ResName :='MyAvi' ; //资源标识
Animate1.Active :=True ;
End ;
(5)存取资源文件中的JPEG
把jpeg单元加入到Interface的uses单元中。
procedure TForm1.LoadJPGClick(Sender: TObject);
var
Fjpg : TJpegImage ;
FStream :TResourceStream ;
begin
Fjpg :=TJpegImage.Create ;
FStream := TResourceStream.Create (Hinstance,'资源标识符',RT_RCDATA) ;
FJpg.LoadFromStream (FStream) ;
Image1.Picture.Bitmap.Assign (FJpg);
end;
(6)存取资源文件中的Wave
把MMSystem加入到Interface的uses单元中
procedure TForm1.LoadWaveClick(Sender: TObject);
begin
PlaySound('MyWav', HInstance, Snd_ASync or Snd_Memory or snd_Resource) ;
end;
5.结束语
位图、光标和图标、AVI动画、JPEG和Wave文件等可以放到资源文件中,上面我们介绍了如何将资源加入到资源文件中,并介绍了在Delphi中动态存取资源文件的方法。Delphi编译工程会自动创建一个和工程名相同的资源文件(如果没有其他的资源,主窗口的图标会放在这个资源文件中)。但是建议最好不要改变这个资源文件。
綏子
2002-11-06
打赏
举报
回复
哪里狠,其实我说放了四十个,应该是六十个。刚才数了一下。
好了,如果这个问题不能解决, 那我想问一下,哪位知道
有没有检测内存的工具,我想知道每个form占用多大内存。
wangbing2000
2002-11-06
打赏
举报
回复
真是够很了
朴素 就可以了
hongqi162
2002-11-06
打赏
举报
回复
是够狠的了!
slley
2002-11-06
打赏
举报
回复
奇怪中。。。
他们家的窗户为什么比我的大呢? 能放的下40多盆花!
scong
2002-11-06
打赏
举报
回复
回复人: xueyin(雪莹) ( ) 信誉:100 2002-11-06 11:33:00 得分:0
我就做了一个窗体,里面有四十多个图标。
呵呵,算你狠。一个窗口有必要放那么多图标吗?太花哨了把
綏子
2002-11-06
打赏
举报
回复
我就做了一个窗体,里面有四十多个图标。
d983074
2002-11-06
打赏
举报
回复
是不是窗体太多了,窗体尽量动态生成
綏子
2002-11-06
打赏
举报
回复
有没有查看每一个form占用内存的工具。
綏子
2002-11-06
打赏
举报
回复
楼上的,能具体点吗? 我用的是.bmp文件
zebi
2002-11-06
打赏
举报
回复
用资源文件啊!
先做一个.rc的文本文件
然后用brcc32.exe编译
然后在将编译后的.res文件加载到.dpr中即可!
CDSoftwareWj
2002-11-06
打赏
举报
回复
只要加入就有内存占用,动态加与和静态在内存中有太大区别吗?区别只是在文件大小一级吧,我的那个4MB的可执行文件在所有图片都动态载入后,文件只有1MB大小,不过内存没有少用多少,除非你用一个加一个,不用一个就释放一个,那个才能少用一点,Windows系统本身会调整内存使用量(或用不用磁盘缓存),没事的,在内存少的机子上一样用,不过太少的就会慢点吧了
wrwr8111
2002-11-06
打赏
举报
回复
是的,只要放路径就行了。
綏子
2002-11-06
打赏
举报
回复
说有什么用呢?具体怎么做。
xzhifei
2002-11-06
打赏
举报
回复
资源文件(图片、大文本。。。)不要保存在控件中,象微软那样,动态载入。
My_first
2002-11-06
打赏
举报
回复
我的也可以运行, 只是占内存太大, 有什么办法吗?
CDSoftwareWj
2002-11-06
打赏
举报
回复
不会吧,那我们4MB的exe运行不也照样运行呀,没事
pdbird
2002-11-06
打赏
举报
回复
将所有的窗体和图片全部都动态的调入!
用完这后,就全部释放掉!
綏子
2002-11-06
打赏
举报
回复
楼上的这样做,会不会减少内存的占用。 如果把图片写到.dll里面会是什么样的。
微信小
程序
就业套餐
微信小
程序
框架的制作 02.微信小
程序
样式入门到精通 03.微信小
程序
样式Flex Box精通课程 04.微信小
程序
实战-企业站界面设计 05.微信小
程序
商城-3天跟我学会界面设计 第三阶段:小
程序
-开发-基础 01.JavaScript基础...
微信小
程序
超级
占内
存_可能没有想象的那么美好——微信小
程序
存储占用与清理实测...
可能没有想象的那么美好——微信小
程序
存储占用与清理实测2019-02-20 09:25:34313点赞922收藏149评论自从2017年微信小
程序
上线以来,从当初红极一时的“跳一跳”到现在各种小
程序
囊括生活中的方方面面,观看新闻、收听广播和音乐、网购和办公等等都可以通过微信小
程序
来实现,不需要额外去下载一些应用即可实现相对应的功能,极大地解放了手机存储,也让大家对微信的认知从聊天软件变成了拯救小内...
微信小
程序
超级
占内
存_实测:微信小
程序
占多少内存?或许真没有你想象的那么“小”!...
微信全新功能“小
程序
”在今天正式开放。不过不少网友对于小
程序
还是有不少的疑问,其中最让网友关心的问题就是小
程序
究竟占用多少手机内存空间呢?(ps. 为了让大众理解,这里说的手机“内存”是指手机内部的存储空间,也就是常说的32G、64G、128G等,专业人士勿喷)首先看看官方怎么说。从这里可以看出,小
程序
有点类似于一个网站的快捷方式,大家只要点开这个快捷方式,就可以进入到对应app的网站,并且使用其...
西门子主
程序
调用子
程序
_子
程序
编程举例说明-广数m98调用子
程序
实例-西门子子
程序
调用实例...
什幺是子
程序
?*在计算机科学中,子
程序
(英语:Subroutine, procedure, function, routine, method, subprogram, callable unit),是一个大型
程序
中的某部份代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。*一般会有输入参数并有返回值,提供对过程的封装和细节的隐藏。这些代码通常被集成为软件...
python中查看变量内存地址的内置函数是_Python中查看变量的类型内存地址所占字节的大小...
Python中查看变量的类型,内存地址,所占字节的大小查看变量的类型#利用内置type()函数>>> nfc=["Packers","49"]>>> afc=["Ravens","48"]>>> combine=zip(nfc,afc)>>> type(combine)查看变量的内存地址#利用内置函数id(),是以十进制显示&...
Delphi
5,392
社区成员
262,732
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章