我有一个使用C#中的线程的程序。有没有一种方法可以编程方式知道应用程序的内存使用情况?我想限制生成的线程到10兆字节的内存,我该如何做到这一点?
我有一个使用C#中的线程的程序。有没有一种方法可以编程方式知道应用程序的内存使用情况?我想限制生成的线程到10兆字节的内存,我该如何做到这一点?
如果你想获取整个正在运行的进程的内存,而不是基于每个线程的内存,那么可以这样:
// get the current process
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
// get the physical mem usage
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
除了 WorkingSet64
之外,还有许多其他进程内存属性,请查看以下链接中的“与内存相关”的属性,选择最适合您的属性。
http://msdn.microsoft.com/zh-cn/library/system.diagnostics.process_properties.aspx
虽然我同意你已经收到的评论,但如果你真的决定采取这种做法,使用System.Environment.WorkingSet
可能是一个实际的答案。
我和威尔以及史蒂夫都认为,除非你真的必须这么做,否则不要这样做……话虽如此……
如果你确实需要这样做,你可以使用 .Net Hosting APIs。它们存在的目的是让应用程序(如 SQL Server)在应用程序内部托管 .net 框架。
这样可以让你控制内存管理等方面。我已经阅读了这篇文章,但从未使用过这些 API,它们在我的待办清单上,等到某个晚上我感到无聊,而我的其他“有趣”项目又不再有趣时,我会去尝试一下 :)
希望这能帮到你。
你不应该通过内存使用量来衡量线程数量。相反,考虑到“处理器”的数量(SMP / 多核 / 超线程)来决定有多少个线程应该并行运行。或者使用 ThreadPool,它会自动调整大小以实现良好的线程与 CPU 比例。