C# 在windows ce 7上运行的.Net应用程序中创建的大量固定对象
我有一个.Net应用程序,它每25毫秒从非托管环境中读取大量数据 当我运行这个应用程序几个小时,比如说25个小时,我会得到C# 在windows ce 7上运行的.Net应用程序中创建的大量固定对象,c#,compact-framework,C#,Compact Framework,我有一个.Net应用程序,它每25毫秒从非托管环境中读取大量数据 当我运行这个应用程序几个小时,比如说25个小时,我会得到异常的memoryoutofeception。 我已经启用了性能监视器统计,它为我的应用程序生成一个stat文件 在该文件中,我看到固定对象计数器增加了很多,它是23467892。 我读到很多固定的对象会使内存碎片化 我使用以下方法读取数据: public int Read(byte[] buffer, int offset, int count) {
异常的memoryoutofeception
。
我已经启用了性能监视器统计,它为我的应用程序生成一个stat文件
在该文件中,我看到固定对象计数器增加了很多,它是23467892
。
我读到很多固定的对象会使内存碎片化
我使用以下方法读取数据:
public int Read(byte[] buffer, int offset, int count)
{
uint BytesTransferred;
unsafe
{
fixed (byte* pByte = &(buffer[offset]))
{
if (!ReadFile(hDSP, pByte, (uint)count, &BytesTransferred, 0)) // returns TRUE on success
{
return -1;
}
}
}
return (int)BytesTransferred;
}
[System.Runtime.InteropServices.DllImport("coredll.dll")]
private static unsafe extern bool ReadFile(
IntPtr hFile,
byte* lpBuffer,
uint nNumberOfBytesToRead,
uint* lpNumberOfBytesRead,
uint lpOverlapped);
在我的Read
方法中,据我所知,一旦我们从该方法返回,所有内容都将被清除
有人能解释/帮助我理解哪些代码正在创建固定对象,以及为什么它们不会被取消固定吗?如果你运行一个简单的应用程序,它只调用这个方法,你还会看到同样的问题吗?您是如何确定这种方法是问题所在的?