【发布时间】:2011-08-25 12:27:46
【问题描述】:
我不是计算机专家,所以让我试着更具体地提出这个问题:
我做一些科学计算,计算有时需要大量内存来存储结果。几天前,我有一个在硬盘上占用 4 GB 的输出文件,但我有这么多的 RAM。所以:
- 当您运行的程序分配的内存比计算机中的可用内存多时,CLR(或其他什么?)如何处理内存?它会在高清中创建一些交换吗? (我知道这可能会减慢我的程序,但我只对内存问题感兴趣)
- 它是否依赖于操作系统,比如我是在 linux 上使用 MONO 还是在 Windows 上使用 VS?
提前致谢!
【问题讨论】:
-
附注,但您可以保存一个 4GB 的文件,而不必将所有 4GB 都存储在内存中。文件流实现通常有一个中间写入缓冲区,当您写入流时,该缓冲区会定期刷新到底层磁盘。
-
实际上,我试图找出一些方法来处理这个“大文件”问题......我的想法是将输出文件拆分为小文件,比如 100 MB。 Stream 可能有用,但这是另一个问题,感谢您的说明!
-
只要您使用相当现代的操作系统,我相信操作系统文件系统将允许非常大的文件并在内部处理所有“分块”。一些工具在处理非常大的文件时会遇到问题,但文件本身应该可以正常存储。所有这些都与内存消耗无关,例如,如果您在写入文件时需要保留大量内存用于计算,这只是一个问题。您是否真的遇到了问题,或者这只是考虑可能的问题?
-
其实这只是一个考虑,伴随着分析那些文件的问题...
标签: c# .net memory-management virtual-memory