这几天试验了一下内存映射的效率,主要参考了网上的几篇资料
C# : http://blog.csdn.net/linux7985/article/details/5853358
C++:http://blog.csdn.net/believefym/article/details/1162461
根据第一篇文章的代码,封装了一个类ShareMemory,C#和C++各一份,方便进行内存映射
很奇怪的是C#的运行速度要比C++快很多!
在封装类的时候:
C# 中的Marshal.Copy( m_pwData, bytData, lngAddr, lngSize ); 内存拷贝这个功能,
对应C++中用的是memcpy。
C++耗时间的操作主要在memcpy,将映射得到的内存拷贝到一个new出来的BYTE动态数组中
好像memcpy 拷贝 堆分配的内存 的速度比Marshal.Copy要慢一些?
试图不用memcpy,直接sscanf读映射出来的内存,又报错,郁闷了。看来必须要memcpy
最后还是放弃了用C++,采用了C#。
据说.net 4.0新增加了内存映射的功能,以后有空试一试