限制.Net CLR内存使用

限制.Net CLR内存使用,.net,clr,memory-management,.net,Clr,Memory Management,好的,问题来了。在我们的生产环境(ASP.Net)中,我们的服务器拥有大量内存和大量用户/会话。我的电脑有8个Gig,我是唯一的用户。在生产中,我们(很少)得到系统.OutOfMemoryException 有了这些背景信息,问题就来了:有没有可能让CLR认为我只有一格或更少的内存?IIRC,有一个命令行选项用于Java 另一个选择是制作一些非常大的对象来填充内存,以模拟内存不足的情况。但这需要修改程序集,而大型对象可能会缓存到磁盘上 推荐?或者其他选项?模拟较低内存/资源系统的一种方法是创建一

好的,问题来了。在我们的生产环境(ASP.Net)中,我们的服务器拥有大量内存和大量用户/会话。我的电脑有8个Gig,我是唯一的用户。在生产中,我们(很少)得到
系统.OutOfMemoryException

有了这些背景信息,问题就来了:有没有可能让CLR认为我只有一格或更少的内存?IIRC,有一个命令行选项用于Java

另一个选择是制作一些非常大的对象来填充内存,以模拟内存不足的情况。但这需要修改程序集,而大型对象可能会缓存到磁盘上


推荐?或者其他选项?

模拟较低内存/资源系统的一种方法是创建一个新系统,并分配您希望它拥有的特定内存量。VMWare和MS虚拟机都具有此功能


除了模拟较低资源的机器之外,虚拟机也是管理测试环境的一种很好的方法。

您的程序是否接收到
OutOfMemoryException
与您的机器上有多少RAM无关
OutOfMemoryException
表示进程已耗尽虚拟内存,这对于独立于物理RAM的每个进程都是一样的

有几个项目会影响进程中的虚拟内存量

  • 32对64位进程
  • 开关,如/LargeAddressware()

最好的猜测是服务器是64位进程,而客户端是32位

这是一个很棒的主意。事实上,我已经有一个VirtualBox实例在运行!我只是从来没有考虑过这种可能性。你赢了!这似乎是一个笨拙的.NET解决方案,用于替换一个简单的JVM参数。是的,操作系统将处理虚拟内存的低级别处理,但是当我们想要更精确地控制哪些应用程序优先于内存时,又该怎么办呢。是的,每个应用程序都有相同的虚拟地址空间,但我们可能希望限制应用程序A消耗的内存量,以便操作系统为应用程序B提供足够的可用空间。@Kelly French:我的答案与.NET或Java无关。它只是建议使用虚拟机(而不是Java虚拟机)来创建一个环境,在这个环境中可以测试内存资源较低的操作系统。答案并不特定于任何编程语言、框架甚至操作系统。当我提到虚拟机时,我的意思是:@Paul Sasik-我的评论不是针对你的,更多的是对.NET设计决策的一般观察,这使得很难任意控制内存使用。我认为你的解决方案很聪明。