清除CLR内存

时间:2009-11-26 01:39:20

标签: memory clr

我遇到了一个问题,即用于开发的工具(模拟器工具)不断抛出OutofMemoryException,我知道它不是我的应用程序,因为无论我运行什么项目,它都会发生。

到目前为止,我唯一能解决的问题是重新启动我的电脑,有没有办法刷新/清除CLR运行时所以我不必每次都重启我的电脑?

4 个答案:

答案 0 :(得分:1)

运行托管代码的每个进程都会启动CLR运行时的单独副本 - 当任何类型的进程终止时,它所占用的内存将被回收到通用池中。

没有任何共享“冲洗”或“清除”。

你的模拟器工具是否有可能“一路”崩溃 - 过程在故障状态下仍然存在?

答案 1 :(得分:1)

听起来这是第三方工具。所以我要向他们提交错误请求。

但正如其他人所说,问题将包含在操作系统流程中。使用任务管理器,您应该能够识别有问题的进程并将其终止。这将恢复记忆并擦拭板岩清洁。然后,您必须重新开始模拟。

如果此问题阻止您完成模拟,那么我会提交一个紧急(但不是生气)的错误请求。

答案 2 :(得分:0)

OutOfMemoryExceptions不一定表示运行时存在问题。任何时候你的系统耗尽内存,无论消耗什么,都会发生这种情况。

查看任务管理器中的进程列表,看看消耗的内存最多。

答案 3 :(得分:0)

Windows上的x86 / 32位用户模式进程仅具有2GB的可寻址虚拟内存空间。 x64 / 64位进程具有16TB的可寻址虚拟内存。你没有说你的进程是32位还是64位 - 但我会假设32位。一旦32位进程开始冒险进入虚拟或提交内存的1.5+ GB区域,您就会玩火,应用程序崩溃只是时间问题。由于每个应用程序都不同,因此崩溃时没有硬数字和快速数字。

让我们来谈谈“2GB”的可寻址空间...... 应用程序使用的内存无法访问所有2GB内存。 CLR需要运行应用程序的许多部分使用开销:

  1. .NET应用程序的8个不同堆 - 请参阅我对.NET process memory usage = 5x CLR Heap Memory?的回答
  2. 运行用户模式进程的内核开销
  3. 线程
  4. 因此,您可以在系统上使用内存,但如果应用程序是x86并且接近上述限制,则应用程序很容易崩溃。

    我已经在StackOverflow上发布了关于CLR内存的相当多的答案和信息,描述了很多这方面的工作原理。找我的名字,看看其他一些答案。它可能有助于清理一些事情。

    HTH