c# - 有什么方法可以查看 C# 应用程序的泄漏内存?

标签 c# wpf winforms memory-leaks

我有一个包含不同组件的应用程序,例如 Windows Media PlayerImage box 等。所有组件都在回放 一个接一个。一个以 Panel 作为父级的用户 Controller 包含 5 个 Grids,一个 Grid 是 4 个 Labels 的组合。同一个用户 Controller 的形式有 2 个带有视频和图像的实例。

因此,我的应用程序每秒都会将其提交的内存大小增加 2MB。一段时间后,我的应用程序因内存不足而停止。所以我想看看内存泄漏在哪个部分或组件中。

是否有任何免费软件可以监控内存泄漏?

最佳答案

要监视 .NEE 中是否存在内存泄漏,您可以使用 Windows 性能监视器。来自这篇文章:Identify And Prevent Memory Leaks In Managed Code :

使用 PerfMon 检查应用程序的以下性能计数器:进程/专用字节数、.NET CLR 内存/所有堆中的字节数和 .NET CLR LocksAndThreads/当前逻辑线程数。 Process/Private Bytes 计数器报告专为进程分配且不能与系统上的其他进程共享的所有内存。 .NET CLR Memory/# Bytes in All Heaps 计数器报告 Gen0、Gen1、Gen2 和大型对象堆的组合总大小。 .NET CLR LocksAndThreads/# of current logical Threads 计数器报告 AppDomain 中的逻辑线程数。如果应用程序的逻辑线程数意外增加,线程堆栈就会泄漏。如果 Private Bytes 增加,但 #Bytes in All Heaps 保持稳定,则非托管内存正在泄漏。如果两个计数器都在增加,则托管堆中的内存正在增加。

另一个跟踪下载内存泄漏的工具是:DebugDiag .它非常有效,而且免费。

关于c# - 有什么方法可以查看 C# 应用程序的泄漏内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22911884/

相关文章:

c# - 如果 DataReader 返回两个结果集,则使用 DataTable.Load() 方法不起作用

c# - 在手动数据库编辑后同步迁移并继续 CodeFirst

c# - Dispatcher.BeginInvoke ,尝试使用 lambda 从文本 block 获取字符串集,但出现转换错误

c# - 是否有可用于查看和编辑大型 xml (100meg++) 的有效 .Net Forms 控件

c# - Entity Framework 插入多对多现有 parent 的记录

c# - ASP.NET Core 6配置-不同环境下的不同数据库

WPF 官方功能区控件主题

c# - MVVM wpf在 View 模型之间传递参数

c# - 如何将组添加到 ListView,然后将项目添加到组

c# - WPF 应用程序 : Controls look like . NET 2.0 中的 WinForms 对话框