c#数组实现对页面文件架构的支持

本文关键字:支持 文件 数组 实现 | 更新日期: 2023-09-27 18:05:53

让我解释一下我需要完成什么。我需要将文件加载到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位进程的经验,似乎更小的内存也很难分配。(在那个特定的例子中,我未能在安装了16GB RAM的Windows 7机器上分配512MB内存。)

所以我很好奇,是否有一个特殊的类,将允许我工作的内容,假设任何长度的文件(通过实现一个页面文件架构的内部模拟)?

c#数组实现对页面文件架构的支持

如果线性流访问(即使多次通过)不是可行的选择,那么Win32中的解决方案将是使用具有相对较小视图的内存映射文件。

我不认为你可以很容易地在c#中做到这一点,但我错了。事实证明。net 4.0及以上版本提供了封装内存映射文件API的类。

见http://msdn.microsoft.com/en-us/library/dd997372.aspx

如果你在C/c++中使用过内存映射文件,你就会知道该怎么做了。

基本思想是使用MemoryMappedFileCreateFromFile来获取MemoryMappedFile对象。使用该对象,您可以调用CreateViewAccessor方法来获取代表文件块的不同MemoryMappedViewAccessor对象;您可以使用这些对象从您选择的文件块中读取数据。

请确保及时处置MemoryamappedViewAccessors以释放内存缓冲区。

你必须找出正确的策略来使用内存映射文件。您不希望创建太多的小视图,否则您将承受大量的开销。大视图太少,会占用大量内存。

(如我所说,我不知道。net中的这些类包装器。一定要仔细阅读MSDN文档:我可能很容易在几分钟内错过一些重要的内容