通知图标内存泄漏?

时间:2014-11-14 21:46:22

标签: c# winforms

我有一个小型的c#winform应用程序,它只有一个表单而且只有一个notifyIcon对象。表格永远不会显示出来。当鼠标移到图标上时,我编写了通知图标来更新.Text属性。我注意到当我将鼠标移到它上面时,内存稳定增加,增量为8个字节。

我确信这是我一遍又一遍地设置.Text属性的事实。由于字符串是不可变的,并且每个setter都创建了一个新字符串,我可以理解这一点,但我认为垃圾收集器最终会清理它。

我应该怎么做以防止内存增加?我已经消除了TimeSpan对象成为罪魁祸首的可能性,因为我已经尝试将它用作类级别对象,并且从不实例化它多次。这没有提供不同的结果,所以我现在每次只声明并实例化一个新的。

private const string TEMPLATE = "Time remaining: {0}h {1}m {2}s";
        private void notifyIcon1_MouseMove(object sender, MouseEventArgs e)
        {
            TimeSpan ts = new TimeSpan((_targetTime - DateTime.Now).Ticks);
            notifyIcon1.Text = string.Format(TEMPLATE, ts.Hours, ts.Minutes, ts.Seconds);
            //I think it's this .Text property that's increasing the memory usage.
        }

1 个答案:

答案 0 :(得分:1)

在你的代码中,显然是分配内存的string.Format(..)函数 正如您在此处看到的,该方法会返回字符串的“副本”:http://msdn.microsoft.com/en-us/library/system.string.format(v=vs.110).aspx#Format_Returns
请注意,正如注释中所建议的,您的代码肯定不会创建内存泄漏,垃圾收集器只是一个惰性实现,它可能没有理由收集未使用的内存,因为它很少。