【问题标题】:Memory usage in C#C# 中的内存使用情况
【发布时间】:2010-10-19 20:19:55
【问题描述】:

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

【问题讨论】:

  • 你开始控制记忆的那一刻就是你开始犯错的那一刻。如果您对内存有要求,请不要使用 .NET。如果您没有要求,请停止担心内存。 .NET 比以往任何时候都更好地管理内存。停下来。不要管它。不错。停止。
  • 我同意威尔的观点。只要您当前引用的对象在 32 位系统上低于 2 GB 内存,就让 GC 处理它。
  • @Will:为什么这么糟糕?如果不是 .NET,那么还会使用什么?
  • @yoitsfrancis:OTH 你有一个服务应用程序,你想防止成为内存占用者,那么你需要说明,我不认为这样的要求是不合理的,它不是工作GC 来限制对内存的需求。
  • 我认为他并没有试图管理他的内存以使每个线程 10Mb 或更少。我认为他正在尝试管理衍生线程的数量,以使他的进程不超过 10Mb,我认为这是一个公平的要求。由他来决定他的申请是否需要这样做。

标签: c# .net multithreading memory


【解决方案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 比率。

        【讨论】:

        • 嗯......你在概括。如果线程可以使用不可预测的内存量怎么办?
        • 如果数量不可预测,只有在线程已经运行时,您才会知道您遇到了麻烦。因此,如果您正在处理可能导致大量内存使用的数据,您将始终需要注意这个问题 - 无论有多少线程正在运行或将要运行。
        猜你喜欢
        • 1970-01-01
        • 2020-12-19
        • 1970-01-01
        • 2010-10-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多