gpt4 book ai didi

c# - 为什么我的带有 DispatcherTimer 的简单 wpf C# 应用程序出现内存泄漏?

转载 作者:行者123 更新时间:2023-11-30 17:14:56 25 4
gpt4 key购买 nike

我用单个文本框和 DispatcherTimer 创建了一个简单的 wpf C#,它每秒显示调用 GC.GetTotalMemory(true) 的结果。每次调用返回的值都在稳步增加,任务管理器显示专用工作内存集也在增加。这真的是内存泄漏,还是只是表面现象?在我的真实应用程序中,每个滴答声中执行更多操作,内存泄漏明显更高。我的代码如下

xaml

<Window x:Class="TestWPFApplication.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<Grid>
<TextBox Name="memoryuseage"></TextBox>
</Grid>
</Window>

xaml.cs

namespace TestWPFApplication
{
/// <summary>
/// Interaction logic for Window1.xaml
/// </summary>
public partial class Window1 : Window
{
System.Windows.Threading.DispatcherTimer tmr;

public Window1()
{
InitializeComponent();

tmr = new System.Windows.Threading.DispatcherTimer();
tmr.Interval = new System.TimeSpan(0, 0, 1);
tmr.Tick += new EventHandler(StaticTick);
tmr.Start();
}

void StaticTick(object o, EventArgs sender)
{
memoryuseage.Text = GC.GetTotalMemory(true).ToString();
}
}
}

最佳答案

Is this really a memory leak, or just the appearance of one?

只是外观。稳定增加是正常的,除非您可以通过运行足够长的时间使其崩溃,否则这不是泄漏。但这可能需要几天的时间才能有小的泄漏。

您的内存使用率应该会趋于平稳,但只有在相当长的时间后才会如此。您可以在此处使用 GC.Collect() 来加快速度(每 10 个滴答左右)。

要进行认真的诊断,您需要一个内存分析器。

例如:http://en.wikipedia.org/wiki/CLR_Profiler

关于c# - 为什么我的带有 DispatcherTimer 的简单 wpf C# 应用程序出现内存泄漏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8323135/

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