Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在windows ce 7上运行的.Net应用程序中创建的大量固定对象_C#_Compact Framework - Fatal编程技术网

C# 在windows ce 7上运行的.Net应用程序中创建的大量固定对象

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) {

我有一个.Net应用程序,它每25毫秒从非托管环境中读取大量数据

当我运行这个应用程序几个小时,比如说25个小时,我会得到
异常的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
方法中,据我所知,一旦我们从该方法返回,所有内容都将被清除


有人能解释/帮助我理解哪些代码正在创建固定对象,以及为什么它们不会被取消固定吗?

如果你运行一个简单的应用程序,它只调用这个方法,你还会看到同样的问题吗?您是如何确定这种方法是问题所在的?