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

时间:2015-08-19 12:39:24

标签: c# memory-management parallel-processing virtual-memory

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

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

如果有可能,那么是否应该记住任何副作用/预防措施?

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

2 个答案:

答案 0 :(得分:2)

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

除非你有特定的问题,否则你应该假装一切都是物理记忆。

您可以依靠操作系统智能地确定物理内存中应保留的内容以及可以换出的内容。只有在有内存压力的情况下才会进行交换,即如果你分配的内存超过实际可用内存。

此外,100-200 MB现在还不是很多。

答案 1 :(得分:2)

  

物理或虚拟内存

您实际上无法从虚拟内存中读取内容。当您尝试这样做会导致页面错误,操作系统将执行page swap并将该虚拟内存恢复到物理内存中。所以你只是从物理记忆中读取。在交换页面时,它将从最近未使用的RAM中换出页面。

从应用程序的角度来看,一切都在物理内存中。您无需关心物理内存中的页面是什么,操作系统会处理它。