我有一个在C#中使用线程的程序。有没有办法以编程方式了解应用程序的内存使用情况?我想限制线程的产生说10兆字节的内存,我该怎么做?
答案 0 :(得分:24)
如果你想要整个运行过程的内存而不是每个线程的内存,那么:
// get the current process
Process currentProcess = System.Diagnostics.Process.GetCurrentProcess();
// get the physical mem usage
long totalBytesOfMemoryUsed = currentProcess.WorkingSet64;
除WorkingSet64
之外还有许多其他进程内存属性,请在以下链接中查看“内存相关”属性,以获取最适合的内容
http://msdn.microsoft.com/en-us/library/system.diagnostics.process_properties.aspx
答案 1 :(得分:4)
虽然我同意您在问题上已经收到的评论,但如果您真的决定采取这种做法,使用System.Environment.WorkingSet
可能是一个真正的答案吗?
答案 2 :(得分:1)
我和Will和Steve在一起,除非你真的必须这样做,否则不要这样做。 。 。那说。 。
如果你确实需要这样做,你可以使用.Net Hosting APIs,因此像SQL Server这样的应用程序可以在应用程序中托管.net框架。
它让你可以控制内存管理等,我已经阅读了这篇文章,但从未使用过API,当我感到无聊并且没有其他“有趣”的项目时,它们会在我的待办事项列表中出现。那个星期感觉很有趣:)
希望这有帮助。
答案 3 :(得分:1)
您不测量内存使用中的线程数。相反,请考虑“处理器”(SMP /多核/超线程)的数量来决定并行运行的线程数。或者使用 ThreadPool ,它会自动调整大小以实现良好的线程到CPU比率。