阅读:1410回复:3
如何在NT和Win2K下快速Copy数据?
我写了一个内存驱动,在系统运行时保留了10M内存,然后把该内存的指针传递给用户使用。但我发现在NT下,该内存与NT下用new分配的内存之间交换数据的速度非常慢(用CopyMemory)。比两块用new分配出的内存Copy速度慢10倍。
在Win2K下情况也是如此,在Win98下则没问题。 请大侠指教。 |
|
沙发#
发布于:2001-12-30 20:33
你是如何保留内存的?(具体用的哪个函数?)如果你分配的是none pagable memory的话,我想不应该慢。
你可以用perm来看一下copy时有多少page fault.或许你用的是pageable memory。 |
|
板凳#
发布于:2002-01-03 13:31
我使用的函数是MmAllocateContiguousMemory
|
|
地板#
发布于: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. |
|