gpt4 book ai didi

c# - Windows 10 上的 WPF 应用程序内存泄漏

转载 作者:行者123 更新时间:2023-11-30 20:18:45 26 4
gpt4 key购买 nike

有一个包含数十万行 C# 代码的大型商业 WPF 应用程序。我最近被分配到它。该应用程序还使用(最新版本的)第三方组件(来自知名的第 3 方组件提供商,我不想列出它们)。

仅某些合作伙伴会发生内存泄漏。他们在早上启动该应用程序并使用它几个小时,直到它完全耗尽内存并最终变得如此缓慢,以至于他们不得不重新启动它(每天几次)。他们有 Windows 10 机器(但这可能没有意义)。无法在我这边重现泄漏。

合作伙伴允许我发布一个特殊版本的应用程序,但不允许使用内存分析器(他们想将该应用程序用于生产,而附加的分析器会减慢它的速度)。所以我的想法是:让我们发布一个特殊版本来记录所有内容,包括用户点击和“可疑”GC 根的处理。正如我所说,我不知道我必须调试的代码,所以我用内存分析器确定了可能泄漏的 GC 根。 (是的,我列出了可能的罪魁祸首,例如依赖属性、静态列表等,但到目前为止运气不好。正如我所说,我不太了解源代码,但我可以访问它并且可以修改它的任何部分。)

我其实是在写一道编程题:除了用户行为和静态变量的访问,我还应该记录什么?也许我应该在每次用户操作后记录空闲内存。对此合适的 .NET 方法是什么?

合作伙伴会在重启应用程序之前复制并发送日志文件。

最佳答案

在这里我想强调几点,以供您选择正确的轨道。

  1. 如果内存泄漏不太可能是 Windows 10 特定的问题。您应该能够在您的开发 PC。

  2. 内存泄漏(和原因)不是那么容易通过书写来追踪 日志。你需要知道究竟是什么让这种成长 实例。

  3. 我会在本地(在您的开发电脑中)使用适当的内存分析工具(例如:ANTS Memory profiler)并尝试重现 问题。

您无需非常了解代码库即可检测内存泄漏。检测泄漏并找到根本原因是此处任务的 80%。如果您知道什么物体在生长以及什么物体在它上面,修复它可能就不那么困难了。

基本上你需要做的是。

  • 获取良好的内存分析器(您可以使用试用版)。
  • 找出您的客户经常使用的领域/功能。
  • 运行应用程序并获取基本内存快照。
  • 执行几次相同的功能并拍摄另一个内存快照。将快照与基本快照进行比较,看看内存中是否有任何不断增长的实例。您应该能够看到对象保留图表,其中显示了那些正在增长的实例(如果有的话)上保留的内容。
  • 当你拍摄内存快照时,内存分析器通常会执行GC.Collect 并从内存中清除所有不需要的实例。因此,您无需更改任何代码即可测试应用程序是否存在内存泄漏。
  • 一次测试一项功能。

关于c# - Windows 10 上的 WPF 应用程序内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40607401/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com