我写了一个应用程序,它运行良好。我让它运行一段时间,然后看一看,发现内存使用量急剧增加。很长一段时间后,我把它缩小到一个功能。我开始了一个只有这个功能的新项目。当我运行时,我得到内存泄漏。
我有一个计时器,我从表格加载
开始private void Form1_Load(object sender, EventArgs e)
{
// for clock on UI
System.Windows.Forms.Timer tmr = new System.Windows.Forms.Timer();
tmr.Interval = 1000;//ticks every 1 second
tmr.Tick += new EventHandler(tmr_Tick);
tmr.Start();
}
然后我
private void tmr_Tick(object sender, EventArgs e)
{
lbl_sync_time.Text = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
}
每秒将时间写入标签。保持运行状态,你看到内存正在用完我只同意少量。
如果我添加垃圾收集器,我确实设法让内存保持稳定。
private void tmr_Tick(object sender, EventArgs e)
{
GC.Collect();
lbl_sync_time.Text = DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss");
}
我看了一下互联网,看到@ https://support.microsoft.com/en-us/help/306822/how-to-improve-string-concatenation-performance-in-visual-c
我尝试使用String Builder但这本身就给我带来了问题,而且内存丢失更加糟糕。
private void tmr_Tick(object sender, EventArgs e)
{
StringBuilder sb = new StringBuilder();
lbl_sync_time.Text = sb.Append(DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss")).ToString();
}
有没有人知道如何在没有内存丢失的情况下更新lbl_sync_time.Text?