C#阵列实现对页面文件体系结构的支持

C#阵列实现对页面文件体系结构的支持,c#,memory-management,C#,Memory Management,让我解释一下我需要完成什么。我需要将一个文件加载到RAM中并分析其结构。我所做的是: //Stream streamFile; byte[] bytesFileBuff = new byte[streamFile.Length]; if(streamFile.Read(bytesFileBuff, 0, streamFile.Length) == streamFile.Length) { //Loaded OK, can now analyze 'bytesFileBuff'

让我解释一下我需要完成什么。我需要将一个文件加载到RAM中并分析其结构。我所做的是:

//Stream streamFile;

byte[] bytesFileBuff = new byte[streamFile.Length];
if(streamFile.Read(bytesFileBuff, 0, streamFile.Length) == streamFile.Length)
{
    //Loaded OK, can now analyze 'bytesFileBuff'
    //Go through bytes in 'bytesFileBuff' array from 0 to `streamFile.Length`
}
但在我的Windows和32位进程中,似乎很难分配更小的RAM。(在那个特定的示例中,我未能在安装了16GB RAM的Windows 7计算机上分配512MB。)

所以我很好奇,是否有一个特殊的类允许我处理假定长度为任意长度的文件上的内容(通过实现页面文件体系结构的内部模拟)?

如果线性流访问(即使有多个通道)不是一个可行的选项,Win32中的解决方案是使用具有相对较小视图的内存映射文件

我不认为你能在C#轻松做到这一点,但我错了。事实证明,.NET4.0及更高版本提供了封装内存映射文件API的类

如果您在C/C++中使用了内存映射文件,您将知道该怎么做

其基本思想是用它来获得一个物体。使用该对象,您可以调用该方法来获取表示文件块的不同对象;您可以使用这些对象按自己选择的块从文件中读取。确保认真处理
MemoryamappedViewAccessors
以释放内存缓冲区

您必须为使用内存映射文件制定正确的策略。您不想创建太多的小视图,否则会产生大量开销。大视图太少,会消耗大量内存


(正如我所说,我不知道.NET中的这些类包装。请仔细阅读MSDN文档:在我花了几分钟的时间审阅它们时,我可能很容易错过了一些重要的内容)

您的分析是否需要随机访问该文件?或者你能线性地做吗?即使您需要多次传递,对于如此大的文件,您最好将其作为流处理。@I:是的,我也倾向于使用流。使用它们太复杂了(或者我应该说,不像使用字节数组那么简单)