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# 中的内存使用情况的主要内容,如果未能解决你的问题,请参考以下文章

C# 中的内存泄漏

如何从 C# 分析内存和 CPU 使用情况

在运行时轮询 C# 应用程序的内存使用情况?

c# windows app - 分析峰值内存使用情况并识别趋势

C#如何在不使用大量内存的情况下裁剪图像? [复制]

js中的内存泄漏