我的进程内存是否恒定?

时间:2010-10-04 19:03:40

标签: c# memory

这是一个学术问题。如果我有一定数量的变量,对象等,我们假设GC不会启动,并且没有瓶颈。其他一些因素可能会迫使我的应用程序内存波动吗?在这种情况下,我的进程内存分配会保持不变吗?

3 个答案:

答案 0 :(得分:1)

您可以使用interop调用非托管函数,这会修改可用内存量。此外,JIT编译器可能随时启动将IL转换为机器代码并可能消耗内存。如果你使用.NET,那么假设GC不会启动并不能实际假设,那么从错误的假设开始绘制的任何结论都是错误的。所以要回答你的问题,你不能认为记忆会保持不变。

答案 1 :(得分:1)

你的场景是人为的,不切实际的:

  

我们假设GC不会启动

嗯,它会的。您的应用程序在执行期间可能采用不同的路径如果确实如此,那么状态可能会不时地不同,对堆上对象的引用可能会保持更长时间等等。我真的没有看到这个问题的目的。

答案 2 :(得分:1)

有可能,就像在How do these people avoid creating any garbage?的问题中提到的情况一样,将系统置于一个正在使用常量内存集并且没有GC发生的状态(因为没有分配任何内容)将需要它收集它,它消失到任何东西)。与之相关的文章甚至有一个实际(但高度专业化)的案例。

请注意,他们拥有大量我们大多数人每天都会使用的方法和类。