[英]Why does my simple wpf C# app with a DispatcherTimer appear to leak memory?
我创建了一个带有单个文本框的简单wpf C#和DispatcherTimer,它每秒显示对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();
}
}
}
这真的是内存泄漏,还是只是一个外观?
只是外观。 稳定的增加是正常的,它不是泄漏,直到你可以通过运行它足够长时间崩溃它。 但这可能需要几天时间才会发生小泄漏。
您的内存使用量应该保持平稳,但仅在相当长的时间之后。 你可以通过在这里使用GC.Collect()(每10个左右)来加快速度。
对于严重的诊断,您将需要一个内存分析器。
我不认为你的代码会有内存泄漏。 内存增加只是因为GC.Collect()方法没有实时调用。 尝试这个:
void StaticTick(object o, EventArgs sender)
{
GC.Collect();
memoryuseage.Text = GC.GetTotalMemory(true).ToString();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.