C#-使用硬盘驱动器扩展大型数组
作者:互联网
由于科学原因,我正在解决9个男子的莫里斯游戏.我正在尝试保存有关游戏状态子集的信息.不幸的是我达到了记忆极限.
我的阵列非常少.当新元素出现时,我需要扩展这些数组.我有足够的内存来存储这些数组,但是我无法在原始数组仍在内存中的情况下创建扩展数组.
我考虑过将原始数组保存到某个文件,将其从内存中删除,创建扩展数组并从文件中加载数据.
有没有一种快速的方法来保存数组大小N并将其作为前N个元素加载到更长的数组中?到目前为止,我正在使用BinaryFormatter,但是我不知道是否可以在这里使用它.
如何告诉GC从内存中删除原始数组?
解决方法:
您是否研究了始终将数组存储在文件中并使用该文件的可能性?
现在,在C#(以及Win API)中,您可以使用Memory-Mapped Files进行操作.基本上,这使您可以映射到内存缓冲区,该缓冲区可访问非常大文件的应用程序部分并对其进行读取/写入.我发布的链接上有一个清晰的示例,其中显示了基础知识以及如何通过很大的文件以内存视图“导航”.
在您的情况下,您想定义自己的文件格式(毫无用处),并决定如何在文件中分隔这些数组.可能需要一个带有元数据的标题(多少个数组,它们的偏移量等)和一个内容部分,该内容部分至少分成多个段.
我认为这是一种更直接的处理方法,而不是必须在每个步骤中都担心GC的情况下将内容交换到内存中.
标签:hard-drive,arrays,memory-management,c,garbage-collection 来源: https://codeday.me/bug/20191121/2051767.html