社区
Delphi
帖子详情
程序怎么占内这么大.
綏子
2002-11-06 10:16:50
我做了个主窗体,放了一些图片(四十个图标),程序运行的时候占掉13%的内存。
我电脑是376M内存, 也没有包括很多的引用单元, 为什么占这么多内存,
有什么办法吗?
这些图标动态加载可以减少内存吗? 如果动态加载这些图标放先在哪里。
...全文
35
19
打赏
收藏
程序怎么占内这么大.
我做了个主窗体,放了一些图片(四十个图标),程序运行的时候占掉13%的内存。 我电脑是376M内存, 也没有包括很多的引用单元, 为什么占这么多内存, 有什么办法吗? 这些图标动态加载可以减少内存吗? 如果动态加载这些图标放先在哪里。
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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里面会是什么样的。
微信小
程序
超级
占内
存_可能没有想象的那么美好——微信小
程序
存储占用与清理实测...
可能没有想象的那么美好——微信小
程序
存储占用与清理实测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(),是以十进制显示&...
C语言
程序
运行下列说法正确的是,1.以下说法中正确的是()(3分)A、B、C、D、A、C语言
程序
总是从第一个的函数开始执行B、在C语言
程序
中,要调用的函数必须在main()函数中定义C、C语言
程序
总是...
1.以下说法中正确的是( C)(3分)A、 B、 C、 D、A、C语言
程序
总是从第一个的函数开始执行B、在C语言
程序
中,要调用的函数必须在main()函数中定义C、C语言
程序
总是从main()函数开始执行D、C语言
程序
中的main()函数必须放在
程序
的开始部分2.启动turbo c 的命令是( A)(3分)A、 B、 C、 D、A、TCB、CC、TURBOCD、TURBO_C3.一个C
程序
的执行是...
Delphi
5,928
社区成员
262,931
社区内容
发帖
与我相关
我的任务
Delphi
Delphi 开发及应用
复制链接
扫一扫
分享
社区描述
Delphi 开发及应用
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章