C# 如何在C中使用安全缓冲区#
如何使用SafebUffer的简单示例是什么?也就是说,如何创建和初始化一个?MSDN文档似乎没有显示这一点。您不能,它是一个抽象类。它唯一可见的具体实现是SafeMemoryMappedViewHandle,它是System.IO.MemoryMappedFiles命名空间中类的助手类。它有一个不可访问的构造函数,因为它只能由使内存映射文件工作的管道正确初始化C# 如何在C中使用安全缓冲区#,c#,buffer,C#,Buffer,如何使用SafebUffer的简单示例是什么?也就是说,如何创建和初始化一个?MSDN文档似乎没有显示这一点。您不能,它是一个抽象类。它唯一可见的具体实现是SafeMemoryMappedViewHandle,它是System.IO.MemoryMappedFiles命名空间中类的助手类。它有一个不可访问的构造函数,因为它只能由使内存映射文件工作的管道正确初始化 用例是一个映射到非托管内存的IntPtr,由句柄管理。例如,在Windows API、MapViewOfFile或GlobalAllo
用例是一个映射到非托管内存的IntPtr,由句柄管理。例如,在Windows API、MapViewOfFile或GlobalAllocPtr中相当罕见。如果您想创建自己的,那么您必须从SafeBuffer派生,这样您就可以调用它的构造函数并调用AcquirePointer。其中大部分是不安全的。你到底想做什么?我想把一个非常大的文件(ByTestStream)从磁盘读入一个非托管的内存流。该文件大于bytearray可以容纳的最大字节数。好的,请使用.NET 4.0对内存映射文件的支持。重新设计MemoryMappedViewStream毫无意义。这实际上并没有使阅读文件更快。谢谢汉斯。我已经试过了,但是内存文件非常慢。不,从磁盘读取文件很慢。MMF的速度是您所能获得的最快速度,但初始数据仍然需要从缓慢旋转的磁盘中取出。唯一可以加快速度的方法是使用更快的磁盘。固态硬盘很好。使用多线程也是一个错误,CPU周期不是您的资源约束。他们只是轮流等待磁盘驱动程序。测试这会给您错误的印象,第二次运行测试会给您提供文件系统缓存中的数据,而不是磁盘中的数据。这在生产中是不会发生的。啊,我明白了。区别在于——没有生产!我不是一个开发人员,这段代码是为我自己的数字运算而编写的-所以它的运行与我在这里概述的非常相似。。。