Windows窗体应用程序计时器内存泄漏?

时间:2013-09-14 02:12:10

标签: c# winforms memory-leaks timer

我有一个用c#编写的非常简单的Windows窗体应用程序,它每隔30秒触发一次计时器,以检查特定进程是否正在运行。

private void timer1_Tick(object sender, EventArgs e)
{
    Process[] localByName = Process.GetProcessesByName("ahost");

    if (localByName.Length > 0)
    {
        //the process is running...do nothing
    }
    else
    {
        //send me an email
        timer1.Enabled = false;
    }
}

由于它正在寻找的流程基本上一直在运行,我根本没有点击else中的电子邮件代码。

这是内存使用情况:

Startup         3,580
Startup +1min   3,724
Startup +10min  7,484
Startup +30min  8,024
Startup +60min  7,604

我是否认为GC正在做它的工作,因为该应用程序仅在一小时内将内存占用量增加一倍?

这是标准的GC行为吗?

我的小EXE是在VS2010中针对.NET Framework 3.0编写的,并且在Win2008 R2服务器上运行。

1 个答案:

答案 0 :(得分:2)

不,没有内存泄漏,这是使用垃圾收集器的语言中程序的预期行为。内存将增加,直到它最终到达垃圾收集器清理任何不需要的对象的点。

除非您正在使用COM对象,图形,位图,字体,基本上任何可能需要处理的非托管资源,否则它不会泄漏。

如果您的应用崩溃,您是否有计划B?您可能需要考虑使用内置函数中的服务器来执行此操作。您可以通过在Windows中配置审计进程跟踪来确定应用程序何时终止。以下链接可以帮助您入门:

  

Audit process tracking

     

How can I track what programs come and go on my machine?

流程跟踪将在Windows事件日志中创建条目,然后您可以使用该条目发送电子邮件。

  

Send an email when an event is logged