【问题标题】:Memory management for a .NET (wpf) application.NET (wpf) 应用程序的内存管理
【发布时间】:2015-03-03 10:19:26
【问题描述】:

对我们应用程序性能的分析表明,当 .NET 内存管理必须分配内存时,CPU 使用率会达到峰值。

有(巨大的)可用内存量,但应用程序并未声明它,它在其已声明的内存部分中搜索可用空间。

是否可以将应用程序配置为在可能的情况下占用更多内存?
这可能与应用程序托管在 Citrix 下这一事实有关吗?

【问题讨论】:

  • “有大量可用内存”是什么意思?你的意思是它实际上已经发布了,即通过VirtualFree,还是 GC 只是压缩了一个 SOH?另外,您在 LOH 或 SOH 上的分配速度慢吗?
  • 性能计数器显示,在 Citrix 服务器上最大 ca。该进程正在使用 20% 的 Citrix 内存。我想知道为什么该过程不使用例如30-40%?不幸的是,LOH/SOH 不在这些性能数据中。
  • 是32位还是64位进程?你能给出问题中的实际数字吗?这将有助于了解您可能会达到哪些限制。

标签: .net wpf windows memory-management


【解决方案1】:

无论系统有多少可用内存,Windows 应用程序都不能无限增长。

您可以在此处了解实际限制:https://msdn.microsoft.com/en-us/library/aa366778(VS.85).aspx#memory_limits

这里还有关于这个问题的额外信息:http://www.codeproject.com/Articles/483475/Memory-Limits-in-a-NET-Process

如果应用程序过于接近其限制,它将在每次需要申请新内存时开始旋转垃圾收集器,以避免空间不足和因 OutOfMemoryException 而崩溃。同时释放和声明内存的这种额外努力也会对性能产生很大的负面影响。

您的应用程序在什么时候停止申请新内存?接近 1 Gb? 2 Gb? 64 位应用程序能够使用更多的内存,但它可能不是一个选项...

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-08
    • 1970-01-01
    • 2012-12-18
    • 1970-01-01
    相关资源
    最近更新 更多