社区
C++ Builder
帖子详情
有请:boyla(土著巫师),给俺们讲解"管理内存"那贴的答案
copy_paste
2003-06-25 04:01:59
http://expert.csdn.net/Expert/topic/1924/1924573.xml?temp=1.017398E-02
我想很多人都关注那贴吧
小小意思,来,喝杯茶先,慢慢开导开导俺们...
...全文
72
28
打赏
收藏
有请:boyla(土著巫师),给俺们讲解"管理内存"那贴的答案
http://expert.csdn.net/Expert/topic/1924/1924573.xml?temp=1.017398E-02 我想很多人都关注那贴吧 小小意思,来,喝杯茶先,慢慢开导开导俺们...
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
28 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
土著巫师
2003-06-26
打赏
举报
回复
TO ALL:
1、首先对大家表示报谦(昨天因为老婆电话催着吃饭没能写出自己的一点小认识)。
2、其次我的程序现在确实没有前面讨论的内存问题了,终究是什么原因我也没深思。不过我把我的想法、做法说出来供大家参考:
A:我的文件读写用的是TFileStream类。就这个类的使用我也发过一个贴子,见:
http://expert.csdn.net/Expert/topic/1740/1740746.xml?temp=.8246729
B:有一本书叫《windows 核心编程》,MS版权,机械工业出版社发行,里面有点内容是说如何管理虚拟内存的,同时说读写文件时大量的文件I/O会使用系统弱化,尢其是大文件,(不知道150M一个算不算大?),所以我把中心放在文件I/O上,经简单测试后发现如果程序不进行文件落盘等动作,在网络上内存使用OK。
C:TFileStream类构造函数对文件的使用是用FileOpen和FileCreate,这两个最终是使用MS WIN SDK函数:CreateFile(...),我改写了这两个函数做了一点优化如下:
//SysUtils.pas原来的
(*function FileOpen(const FileName: string; Mode: LongWord): Integer;
const
AccessMode: array[0..2] of LongWord = (
GENERIC_READ,
GENERIC_WRITE,
GENERIC_READ or GENERIC_WRITE);
ShareMode: array[0..4] of LongWord = (
0,
0,
FILE_SHARE_READ,
FILE_SHARE_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE);
begin
Result := Integer(CreateFile(PChar(FileName), AccessMode[Mode and 3],
ShareMode[(Mode and $F0) shr 4], nil, OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL, 0));
end;*)
//SysUtils.pas改过的
function FileOpen(const FileName: string; Mode: LongWord): Integer;
const
AccessMode: array[0..2] of LongWord = (
GENERIC_READ,
GENERIC_WRITE,
GENERIC_READ or GENERIC_WRITE);
ShareMode: array[0..4] of LongWord = (
0,
0,
FILE_SHARE_READ,
FILE_SHARE_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE);
begin
Result := Integer(CreateFile(PChar(FileName),
AccessMode[Mode and 3],
ShareMode[(Mode and $F0) shr 4],
nil,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_WRITE_THROUGH or FILE_FLAG_RANDOM_ACCESS,
0
)
);
end;
//SysUtils.pas原来的
(*function FileCreate(const FileName: string): Integer;
begin
Result := Integer(CreateFile(PChar(FileName), GENERIC_READ or GENERIC_WRITE,
0, nil, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0));
end;*)
//SysUtils.pas改过的
function FileCreate(const FileName: string): Integer;
begin
Result := Integer(CreateFile(PChar(FileName),
GENERIC_READ or GENERIC_WRITE,
FILE_SHARE_READ or FILE_SHARE_WRITE,
nil,
CREATE_ALWAYS,
FILE_ATTRIBUTE_NORMAL or FILE_FLAG_WRITE_THROUGH or FILE_FLAG_RANDOM_ACCESS,
0
)
);
end;
我把SysUtils.pas、ffmt.asm加入项目中,同时把se.asm也COPY进自己的项目目录内。删除TDS文件、OBJ文件、REBUILD后试用,OK了。CreateFile提供的这两个参数对我这个程序可能很重要:一个是一定的实时性要求,一个是大量的随机访问。
3、最后愿BCB、DELPHI程序员能够多多交流共同进步,以后有什么问题还望大家多多帮助,重新申明:我可不是接分来的:),分对我来说实在是没什么意义。(我30岁才吃程序员这行钣,C++学了3年多一点)
everlasting
2003-06-26
打赏
举报
回复
一群蹭分的,再加一个倒分的
BS!
yingyys
2003-06-26
打赏
举报
回复
人呢
ThinkX
2003-06-26
打赏
举报
回复
很不错的做法,在最需要优化的地方才优化。
耙子
2003-06-26
打赏
举报
回复
我也30了,从来都没人要。呵呵
warton
2003-06-26
打赏
举报
回复
说完了??木头结账了!!
warton
2003-06-26
打赏
举报
回复
30岁才吃程序员这行钣?厉害!
(我30岁就没人要了!555)
GaoLun
2003-06-26
打赏
举报
回复
to 木头,我倒, 要死人了, 你跑那里去了
GaoLun
2003-06-26
打赏
举报
回复
to pazee
你的全名是不是linquan?
LanceX
2003-06-26
打赏
举报
回复
千呼万唤没出来?
耙子
2003-06-26
打赏
举报
回复
木头,我也要分!
ljwwjh
2003-06-26
打赏
举报
回复
up
copy_paste
2003-06-26
打赏
举报
回复
原来是这个问题。
我以前写过一个小测试,也就频繁写文件的原故,写四个字节就需要写一次文件,硬盘唧唧嘎嘎的响个不停(倒没注意虚拟内存),后来学FlashGet,用了X的内存作缓存,写数据先写到内存里,满了后,再写到文件,呵呵,情况好多.而且速度也好多了,好像是:不使用内存写文件好半个小时,用了后,只要5-6分钟,文件的大小在200-300M左右.感觉比较好,呵
lihonggen0
2003-06-26
打赏
举报
回复
顶
warton
2003-06-25
打赏
举报
回复
还不过来??
chifengwatch
2003-06-25
打赏
举报
回复
听课...
「已注销」
2003-06-25
打赏
举报
回复
听课
Behard
2003-06-25
打赏
举报
回复
坐下来听课
GodBirdFlying
2003-06-25
打赏
举报
回复
占个位置先!
warton
2003-06-25
打赏
举报
回复
?
加载更多回复(8)
Microsoft Visual FoxPro 9.0 SP2 HELP
http://download.csdn.net/detail/
boyla
/3881590,此帮助下载后直接解压到迷你版的执行目录下就可了,只可惜不能在IDE里直接通过菜单或F1打开,好在现在用这玩意的都是参考而已,就在资源
管理
器直接打开吧。...
在CentOS 5上安装最新版phpMyAdmin
管理
工具
这个版本需要php 5.2或更高的版本,所以必须想办法升级系统自带的php 5.1版本,具体操作就是利用系统yum“测试库”更新php到5.2版本,可以参考http://blog.csdn.net/
boyla
/archive/2009/11/14/4811511.aspx。...
在centos 5上安装最新版phpmyadmin
在CentOS 5上安装最新版phpMyAdmin
管理
工具 1、我下载的是phpMyAdmin-3.2.3-all-languages版本,这个版本需要php 5.2或更高的版本,所以必须想办法升级系统自带的php 5.1版本,具体操作就是利用系统yum...
CentOS 6 最小化安装找不到setup的解决办法
转载http://blog.csdn.net/
boyla
/article/details/6629870 近日安装了CentOS 6,由于安装时不想安装图形界面,所以当时就选择了最小化安装,没想到安装后连最基本的setup命令都找不到,在网上找了一下,大体...
Wordle_1.0
游戏 输入1后你可以输入
答案
(必须为合法5字母单词),或者输入random,为随机
答案
。 然后输入换行,便可以来到猜词界面。当你输入一个单词后,系统会为你反馈。 如
答案
为apple时,你输入plate,反馈便会如图所示: ...
C++ Builder
13,825
社区成员
102,679
社区内容
发帖
与我相关
我的任务
C++ Builder
C++ Builder相关内容讨论区
复制链接
扫一扫
分享
社区描述
C++ Builder相关内容讨论区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章