qiaojh007
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2006-04-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
阅读:1410回复:3

如何在NT和Win2K下快速Copy数据?

楼主#
更多 发布于:2001-12-28 10:29
我写了一个内存驱动,在系统运行时保留了10M内存,然后把该内存的指针传递给用户使用。但我发现在NT下,该内存与NT下用new分配的内存之间交换数据的速度非常慢(用CopyMemory)。比两块用new分配出的内存Copy速度慢10倍。
在Win2K下情况也是如此,在Win98下则没问题。
请大侠指教。
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
沙发#
发布于:2001-12-30 20:33
你是如何保留内存的?(具体用的哪个函数?)如果你分配的是none pagable memory的话,我想不应该慢。

你可以用perm来看一下copy时有多少page fault.或许你用的是pageable memory。
qiaojh007
驱动牛犊
驱动牛犊
  • 注册日期2001-03-23
  • 最后登录2006-04-13
  • 粉丝0
  • 关注0
  • 积分0分
  • 威望0点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
板凳#
发布于:2002-01-03 13:31
我使用的函数是MmAllocateContiguousMemory
zdhe
驱动太牛
驱动太牛
  • 注册日期2001-12-26
  • 最后登录2018-06-02
  • 粉丝0
  • 关注0
  • 积分72362分
  • 威望362260点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
  • 社区居民
地板#
发布于:2002-01-05 17:20
至少你得说明你是如何传递指针和如何拷贝数据的.(如何把预先分配的kernel内存映射上来的?),copy动作虽然慢了结果是否和预期的一样?正确性必须先保证.如果结果不对那查到的数据没有意义.

几个可以考虑的解决方法.
1. NT下的Thread要比9x多的多,切换也频繁,或许真正的拷贝时间并没有边慢只是执行机会少了.
 升高copy thread的priority,是否会变好些?

2.做个拷贝用的device,把你的buffer指针传下去, 在kernel下拷贝, copy时升高irql,使得没有或几乎没有其它thread的影响. 这时候用new分配内存不太合适.考虑AllocateUserPhysicalPages,VirtualAlloc这样的函数,而且不要使用buffered io.



游客

返回顶部