2014-11-05 49 views
2

我有一个.NET进程,由于我不会进入的原因,会消耗大量的RAM。我想要做的是实现此进程可以使用的RAM数量的上限。有没有办法做到这一点?限制.NET进程可以使用的最大内存量?

我发现的最接近的是Process.GetCurrentProcess().MaxWorkingSet我不认为我做我基础已经阅读文档上想要什么。

我想出了使用GC.GetTotalMemory(true)得到使用,并重新启动,如果它是在一定量的RAM量最好。但这并不理想。

+1

您可以检查您的使用情况,并把自己关下来(或写看门狗),但你不能让操作系统去做。 – BradleyDotNET 2014-11-05 21:14:35

+0

@BradleyDotNET:完全不对。看到我的答案。 – 2014-11-05 21:21:24

+1

@JimMischel它并不完全是一个硬性限制:“进程的最大工作集大小,以字节为单位虚拟内存管理器在进程处于活动状态并且可用内存不足时,会尝试保留驻留在进程中的内存量不多“。也就是说,我不知道这个功能,谢谢(你的)信息! – BradleyDotNET 2014-11-05 21:22:26

回答

2

您可以通过拨打SetProcessWorkingSetSizeExSetProcessWorkingSetSize来设置进程工作集的最小和最大大小。

没有为SetProcessWorkingSetSize一个pinvoke.net条目。

请务必阅读MSDN文档为准功能,您决定调用。

请注意,这并不妨碍你的应用程序分配更多的虚拟内存,而是把对进程的虚拟内存有多少物理内存占用在任何给定的时间限制。

+1

这与分配Process.Min/MaxWorkingSet属性没有区别。只需在[参考资源](http://referencesource.microsoft.com/#System/services/monitoring/system/diagnosticts/Process.cs#505)中查看即可。 – 2014-11-05 21:27:31

+0

这是我的理解,这些是虚拟管理器使用的限制,将在内存不足时执行。只要有足够的内存可用,当前的工作集大小就允许增长大于MaxWorkingSet中的值。因此,不解决我的问题。 – Coltech 2014-11-05 21:52:59

相关问题