gpt4 book ai didi

c# - 使用硬盘驱动器扩展巨大的阵列

转载 作者:行者123 更新时间:2023-11-30 16:10:55 26 4
gpt4 key购买 nike

由于科学原因,我正在解决九人莫里斯游戏。我正在尝试保存有关某些游戏状态子集的信息。不幸的是我达到了我的内存极限。

我几乎没有非常大的阵列。当新元素出现时,我需要扩展这些数组。我有足够的内存来存储这些数组,但我无法在原始数组仍在内存中的情况下创建扩展数组。

我考虑过将原始数组保存到某个文件,将其从内存中删除,创建扩展数组并从文件加载数据。

是否有任何快速的方法来保存数组大小 N 并将其作为第一个 N 元素加载到更长的数组?到目前为止,我一直在使用 BinaryFormatter,但我不知道我是否可以在这里使用它。

如何告诉 GC 从内存中删除原始数组?

最佳答案

您是否研究过始终将数组存储在文件中并使用它的可能性?

在 C#(以及 Win API)中,现在您可以使用 Memory-Mapped Files 来做到这一点.基本上,这允许您映射到一个内存缓冲区,您的应用程序部分可以访问非常大的文件并读取/写入它们。在我发布的链接中有一个清晰的示例,它展示了基础知识以及如何使用内存 View “导航”一个非常大的文件。

在您的情况下,您想定义自己的文件格式(没什么特别的)并决定如何在文件中分隔这些数组。您可能需要一个包含元数据(多少个数组、它们的偏移量等)的 header 和一个至少分为多个段的内容部分。

我认为这是一种更直接的处理方法,而不是将内容交换进/出内存 + 必须在每一步都担心 GC。

关于c# - 使用硬盘驱动器扩展巨大的阵列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25023582/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com