C# 中的内存使用情况
Posted
技术标签:
【中文标题】C# 中的内存使用情况【英文标题】:Memory usage in C# 【发布时间】:2010-10-19 20:19:55 【问题描述】:我有一个在 C# 中使用线程的程序。有没有办法以编程方式了解应用程序的内存使用情况?我想将线程的生成限制为 10 兆字节的内存,我该怎么做?
【问题讨论】:
你开始控制记忆的那一刻就是你开始犯错的那一刻。如果您对内存有要求,请不要使用 .NET。如果您没有要求,请停止担心内存。 .NET 比以往任何时候都更好地管理内存。停下来。不要管它。不错。停止。 我同意威尔的观点。只要您当前引用的对象在 32 位系统上低于 2 GB 内存,就让 GC 处理它。 @Will:为什么这么糟糕?如果不是 .NET,那么还会使用什么? @yoitsfrancis:OTH 你有一个服务应用程序,你想防止成为内存占用者,那么你需要说明,我不认为这样的要求是不合理的,它不是工作GC 来限制对内存的需求。 我认为他并没有试图管理他的内存以使每个线程 10Mb 或更少。我认为他正在尝试管理衍生线程的数量,以使他的进程不超过 10Mb,我认为这是一个公平的要求。由他来决定他的申请是否需要这样做。 【参考方案1】:如果你想要整个运行进程的内存,而不是基于每个线程,如何:
// 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
【讨论】:
【参考方案2】:虽然我同意你已经收到的关于你的问题的 cmets,但如果你真的决定采取这种行动,使用 System.Environment.WorkingSet
可能是一个实际的答案?
【讨论】:
【参考方案3】:我支持威尔和史蒂夫,除非你真的必须这样做,否则不要这样做。 . .那说。 . .
如果您真的需要这样做,您可以使用 .Net Hosting APIs 他们在那里,因此 SQL Server 等应用程序可以在应用程序中托管 .net 框架。
它可以让您控制内存管理等那一周感觉很有趣:)
希望这会有所帮助。
【讨论】:
【参考方案4】:您不会测量内存使用中的线程数。相反,要考虑“处理器”(SMP / 多核 / 超线程)的数量来决定应该并行运行多少线程。或者使用 ThreadPool,它会自动调整大小以实现良好的线程与 CPU 比率。
【讨论】:
嗯......你在概括。如果线程可以使用不可预测的内存量怎么办? 如果数量不可预测,只有在线程已经运行时,您才会知道您遇到了麻烦。因此,如果您正在处理可能导致大量内存使用的数据,您将始终需要注意这个问题 - 无论有多少线程正在运行或将要运行。以上是关于C# 中的内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章