【发布时间】:2017-04-29 16:01:27
【问题描述】:
我正在开发一个执行 CPU 和内存密集型计算的应用程序。可能出现的一个问题是我们并行运行了太多计算任务,导致机器使用太多内存,一切都停止了。解决方案很简单:并行运行更少的任务。然而,windows 没有提供内存压力过大的警告,有时我们的用户并没有意识到他们正在运行太多的任务。我们希望显示来自应用程序的警告以帮助我们的用户。
问题 1:提供这样的警告是个好主意,还是在概念上存在问题?
问题 2:检测内存不足导致性能不佳的好方法是什么?我正在考虑简单地查看仍然可用的物理内存百分比,并在该百分比变得非常低时发出警告。然而,这似乎有些武断,容易误报。
还有其他方法可以查看应用程序或窗口是否进行了大量内存交换,或者是否在垃圾收集上花费了大量时间?我正在 Windows 上运行 .NET 应用程序。
【问题讨论】:
-
用户不可能注意到机器何时开始抖动。也不是看不到,用System.Management监控Win32Process,“Page faults/sec”。但误报是一个严重的风险。往往是一个草率的编程问题,但修复完全太便宜,不能花太多时间在上面。您的程序所需的 RAM 量必须是规定的最低系统要求的一部分,并且需要由您的安装程序进行验证。
-
计算时,我们的用户一般不会使用机器,只是在等待计算完成,所以他们可能不会注意到任何抖动。此外,我们的应用程序不需要预定数量的 RAM。在实际运行之前确定计算需要多少 RAM 也非常困难。不过,我会研究监控“页面错误/秒”。
-
海玛,别这样。告诉用户一些对他来说已经很明显的事情并不是一个有用的功能。这是构成项目灾难的那种东西,无法在规定的时间内完成它应该执行的任务的程序不是可用的程序。把你的精力放在它所属的地方,数据集大小和内存使用之间总是存在相关性。如果您还不知道,那么您必须花时间来衡量它。
-
汉斯:你的回答无法理解。 “数据集大小和内存使用之间总是存在相关性。”你到底想告诉我们什么?