Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/311.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# 如何在C中使用安全缓冲区#_C#_Buffer - Fatal编程技术网

C# 如何在C中使用安全缓冲区#

C# 如何在C中使用安全缓冲区#,c#,buffer,C#,Buffer,如何使用SafebUffer的简单示例是什么?也就是说,如何创建和初始化一个?MSDN文档似乎没有显示这一点。您不能,它是一个抽象类。它唯一可见的具体实现是SafeMemoryMappedViewHandle,它是System.IO.MemoryMappedFiles命名空间中类的助手类。它有一个不可访问的构造函数,因为它只能由使内存映射文件工作的管道正确初始化 用例是一个映射到非托管内存的IntPtr,由句柄管理。例如,在Windows API、MapViewOfFile或GlobalAllo

如何使用SafebUffer的简单示例是什么?也就是说,如何创建和初始化一个?MSDN文档似乎没有显示这一点。

您不能,它是一个抽象类。它唯一可见的具体实现是SafeMemoryMappedViewHandle,它是System.IO.MemoryMappedFiles命名空间中类的助手类。它有一个不可访问的构造函数,因为它只能由使内存映射文件工作的管道正确初始化


用例是一个映射到非托管内存的IntPtr,由句柄管理。例如,在Windows API、MapViewOfFile或GlobalAllocPtr中相当罕见。如果您想创建自己的,那么您必须从SafeBuffer派生,这样您就可以调用它的构造函数并调用AcquirePointer。其中大部分是不安全的。你到底想做什么?

我想把一个非常大的文件(ByTestStream)从磁盘读入一个非托管的内存流。该文件大于bytearray可以容纳的最大字节数。好的,请使用.NET 4.0对内存映射文件的支持。重新设计MemoryMappedViewStream毫无意义。这实际上并没有使阅读文件更快。谢谢汉斯。我已经试过了,但是内存文件非常慢。不,从磁盘读取文件很慢。MMF的速度是您所能获得的最快速度,但初始数据仍然需要从缓慢旋转的磁盘中取出。唯一可以加快速度的方法是使用更快的磁盘。固态硬盘很好。使用多线程也是一个错误,CPU周期不是您的资源约束。他们只是轮流等待磁盘驱动程序。测试这会给您错误的印象,第二次运行测试会给您提供文件系统缓存中的数据,而不是磁盘中的数据。这在生产中是不会发生的。啊,我明白了。区别在于——没有生产!我不是一个开发人员,这段代码是为我自己的数字运算而编写的-所以它的运行与我在这里概述的非常相似。。。