leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
阅读:1241回复:6

纯技术问题

楼主#
更多 发布于:2001-12-29 12:44
有一个程序,需要同时打开多个大文件进行读操作,比如32个40M的文件。
分别读一部分内容后输出到指定的设备,设备在中断处理程序中将内容送出。
问题:因为中断教快,不能在指定的时间内读取文件,导致设备工作不流畅。
是否有好的处理文件的方法,能够快速读取数据?
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2001-12-29 13:19
给你一点提示,自己看

文件映射(File Mapping)
完成端口(Completion Port)

看书 《windows高级编程指南》 第三版 清华大学出版社
作者 : Jeffery Richer
“萎软”,是Microsoft的小名!
leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
板凳#
发布于:2001-12-29 16:40
谢谢!
可我在98下,98对完成端口不支持。
KDriver
驱动中牛
驱动中牛
  • 注册日期2001-06-09
  • 最后登录2008-09-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
地板#
发布于:2001-12-29 16:46
Alert IO呢,这个支持吗。

类似于完成端口,但是这个东西是使用一个CallBack函数来做,不用线程,效率相对完成端口要低,但是也是第二好的方法了

(再不支持,就没有办法了)

另外,在这里胡说一句,win98是桌面系统,你不能对他期望太高,像你的这种要求性能较高的东西,应该在nt下做!!!

-----------个人意见!
“萎软”,是Microsoft的小名!
leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
地下室#
发布于:2001-12-29 17:03
我用VC写的程序,好象没有Alert IO。
想用内存映像试一试。
谢谢!
lu0
lu0
论坛版主
论坛版主
  • 注册日期2001-06-10
  • 最后登录2016-04-05
  • 粉丝2
  • 关注0
  • 积分-6311分
  • 威望21111点
  • 贡献值0点
  • 好评度7点
  • 原创分0分
  • 专家分0分
5楼#
发布于:2001-12-30 19:31
无论哪种方法. 最终都向FSD请求读文件. 最快的应该是自己预先CACHE一段内容. 等中断来了直接从内存TRANSFER. 由于东西太大,不能全部CACHE下来. 这就要靠你的预测算法了.
Regards, Lu Lin Webmaster of Inside Programming http://www.lu0s1.com
leehan
驱动牛犊
驱动牛犊
  • 注册日期2001-12-26
  • 最后登录2016-10-11
  • 粉丝0
  • 关注0
  • 积分9分
  • 威望72点
  • 贡献值0点
  • 好评度11点
  • 原创分0分
  • 专家分0分
  • 社区居民
6楼#
发布于:2001-12-31 09:30
其实我的应用中,文件访问是顺序的,而且每次读取的长度是一样的,在卡中对应每个通道有两块映射的内存区域与之对应,其中一块用来做cache,但还是有我所说的问题。
上层程序是用普通的文件操作做的,我希望其它的方式会对性能有所提高。
游客

返回顶部