前一个版本的SharedMemory(.NET中使用Mapping File 的API :) )有一个Bug,当多次向内存映射文件中写数据的时候,没有及时把原有的数据清除.当前一次写入的数据的长度超过当前数据的长度的时候,读的时候就会把前一次的多余的数据也读出来.
修正的方法很简单,在每次写的时候,把内存清0 :)
修改的部分的代码如下:
public void CopyFrom(byte[] source,int startIndex,int length)
{
this.length = length;
Clear();
Marshal.Copy(source,startIndex,new IntPtr(Address),length);
}
public void Clear(){
byte[] buffer = new byte[size];
Marshal.Copy( buffer,0,new IntPtr(Address),size);
}
{
this.length = length;
Clear();
Marshal.Copy(source,startIndex,new IntPtr(Address),length);
}
public void Clear(){
byte[] buffer = new byte[size];
Marshal.Copy( buffer,0,new IntPtr(Address),size);
}
最新版本可以到这个地方下载: SharedMemory.Zip