我有一个用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服务器上运行。
答案 0 :(得分:2)
不,没有内存泄漏,这是使用垃圾收集器的语言中程序的预期行为。内存将增加,直到它最终到达垃圾收集器清理任何不需要的对象的点。
除非您正在使用COM对象,图形,位图,字体,基本上任何可能需要处理的非托管资源,否则它不会泄漏。
如果您的应用崩溃,您是否有计划B?您可能需要考虑使用内置函数中的服务器来执行此操作。您可以通过在Windows中配置审计进程跟踪来确定应用程序何时终止。以下链接可以帮助您入门:
流程跟踪将在Windows事件日志中创建条目,然后您可以使用该条目发送电子邮件。