在 C# 中手动控制内存分配

Manually controlling memory allocation in C#

我想知道是否可以显式声明 C# 应用程序应使用哪种内存类型(物理或虚拟内存)来执行不同的操作?让我通过一个例子来解释它:

比方说,我有一个大约 100 或 200 MB 的文件。我需要解析这个文件,访问和分析它的内容并对文件内容执行操作。我可以将整个文件及其内容专门存储在虚拟内存而不是物理内存上吗?

如果可以的话,有什么side-effects/precautions需要注意的地方吗?

我的问题背后的原因是我经常需要处理如此巨大的文件或数据集(从数据库中检索)并对它们执行操作,其中一部分不需要顺序发生或同步。如果可能的话,我想通过并行化非顺序部分来提高应用程序的执行时间和性能。

通常您不会(也不应该)了解物理内存的管理方式。在 Windows 中,因此在 CLR 中,一切都是虚拟内存。

除非您遇到特定问题,否则您应该假装一切都是物理内存。

您可以依靠操作系统智能地确定什么应该保留在物理内存中,什么可以换出。仅当存在内存压力时才会发生交换,即如果您分配的内存多于实际可用的内存。

此外,现在 100-200 MB 并不算多。

physical or virtual memory

您实际上无法从虚拟内存中读取。当您尝试这样做时会导致页面错误,并且 OS 将执行 page swap 并将该虚拟内存带回物理内存。所以你只能从物理内存中读取。在换入页面时,它会从 RAM 中换出最近未使用的页面。

从应用程序的角度来看,一切似乎都在物理内存中。您无需关心哪些页面在物理内存中,哪些页面在物理内存中,OS 会处理。