【问题标题】:Net and native applications memory management网络和本机应用程序内存管理
【发布时间】:2018-02-20 10:42:41
【问题描述】:

据我所知,单个 .net 应用程序可以从可用内存中分配很多。它将由 GC 在某个时间释放。我从来不用太在意细节。它只是工作。

但是,如果在大多数/所有内存都被 .net 应用程序使用的情况下启动本机应用程序会发生什么? GC 会尊重这一点并在之前释放内存吗?还是 Windows “小心” 并将 .net 应用程序的内存交换到交换文件中?


我有一台带有慢速 HDD 的 PC,其中我的 WPF 应用程序(MVVM、位图、数据库、相当内存密集型)占用 200-2000 Mb(高达 80%)的 RAM,并且我收到报告 PC 变成了什么运行 Office、防病毒等时速度慢

在例如Photoshop 有一个设置来限制已用 RAM 的数量。现在我在想,只要这样的事情在我的 WPF 应用程序中有意义。

无法控制 GC 内存分配是否存在问题?我应该限制我的应用程序内存的使用量吗?

【问题讨论】:

  • Will GC respects this and free memory before? GC 将响应内存不足的情况。它显然无法在 之前 释放内存 - 因为它直到发生内存不足的情况时才知道。
  • @mjwills,我希望有所收获。来自微软的一些魔法(因为他们同时制造了:Windows 和 .Net)。谈论多个 .net 应用程序 - 它们可能(它们是吗?)共享同一个 GC 实例,它可以足够聪明地为应用程序 A 收集垃圾,然后在内存不足时为 B 分配一些东西?跨度>
  • @mjwills,因为缓慢的 HDD 分页是问题:HDD 停止并且应用程序的正常 IO 活动(例如日志记录)被阻止。看来我想避免它(例如通过限制可用 RAM)。我很惊讶地意识到它需要这样做。
  • 这感觉像是一个 XY 问题 - meta.stackexchange.com/questions/66377/what-is-the-xy-problem。当你也许应该问“为什么我的程序使用 2GB 的 RAM”时,你是在问 GC?
  • @mjwills,我确信这是正常行为。该应用程序很大,根据用户的操作,200-2000 MB 的偏差对我来说似乎并不异常。我认为这个假设是错误的以及多少是可以的答案仍然适合我的问题。有时我们问错了问题,指出问题为什么错的答案仍然是答案。

标签: c# memory-management


【解决方案1】:

所描述的问题看起来与 .NET 内存管理/GC 无关,假设应用程序仅在内存中保存操作数据(正在使用)。 .NET 应用程序与任何其他用户应用程序没有什么不同,因此操作系统将以相同的方式处理它们:将不经常使用的内存块移动到交换文件。

如果应用程序占用 80% 的 RAM 并密集使用内存,与其他应用程序竞争,整个进程会产生大量的page faults,导致交换文件和内存之间的流量很大。这会导致严重的性能下降,尤其是在 HDD 速度较慢的情况下。

此游戏中的 .NET 部分只是从不再使用的数据中清除 time to time 中的应用程序内存。如果应用程序运行所需的数据量很大,而仅仅添加更多 RAM 不是一种选择,那么重新设计应用程序(以某种方式限制加载的数据量)是一种相当不错的方法。

【讨论】:

  • 换句话说,您建议我实施“最大允许 RAM”设置?
  • 一点也不。我不是在这里建议,我希望为您提供一些信息以帮助您做出决定。
  • 当我说 内存密集型 时,我的意思是很多分配:底层 USB 通信、事件、位图、数据模板 - 所有这些都会产生许多 new 请求。该应用程序只需 200 MB 就可以正常工作,但由于我这边没有控制,GC 最多可以吃掉 2000 MB。我可以插入一个计时器,每秒钟左右执行一次GC.Collect(),然后我猜内存永远不会上升。值得一试?或者你想知道什么样的信息?
  • 它肯定会帮助识别内存使用模式。如果它有帮助,那么问题可能是实际上没有达到 GC 阈值,例如位图可能会发生这种情况 - 它们是微小的托管包装器和巨大的非托管内存块。
  • 实际上,我发现了一些“可疑”的东西。您对位图的提示非常有帮助。它缺少来自某些变更集的GC.AddMemoryPressure 调用,而它们是were proven necessary
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多