C#中的内存使用情况

时间:2009-04-16 12:32:59

标签: c# .net multithreading memory

我有一个在C#中使用线程的程序。有没有办法以编程方式了解应用程序的内存使用情况?我想限制线程的产生说10兆字节的内存,我该怎么做?

4 个答案:

答案 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比率。