.NET (wpf) 应用程序的内存管理

5
我们应用程序的性能分析显示,在.NET内存管理需要分配内存时,CPU使用率达到了峰值。 尽管存在大量未使用的内存,但应用程序并未占用它们,而是在已经占用的内存中搜索可用空间。 是否可能在可以的情况下配置应用程序来占用更多内存? 这与应用程序是否托管在Citrix有关吗?

“'There was an enormous amount of memory just free?' 这句话是什么意思?你是指它实际上被释放了,比如通过 VirtualFree,还是垃圾回收只是压缩了 SOH 中的一个?此外,你的慢分配是在 LOH 还是 SOH 上?” - Collin Dauphinee
性能计数器显示,在 Citrix 服务器上,进程最多使用约 20% 的 Citrix 内存。我想知道为什么该进程不使用例如 30-40% 的内存?不幸的是,LOH/SOH 不在这些性能数据中。 - Gerard
1
这是一个32位还是64位的进程?您能在问题中给出实际数字吗?这将有助于了解您可能遇到的限制。 - codekaizen
1个回答

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位应用程序能够使用更大量的内存,但这可能不是一个选择...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接