【发布时间】: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