记忆问题或不是最佳做法

时间:2014-05-02 18:12:17

标签: c# timer windows-services heap heap-memory

如果以下设计不利于管理堆/内存并且从设计模式的角度来看,请告诉我。 在这里,我在Windows服务上使用C#Timers.Timer,其中时间戳事件在多个线程上触发。

这里我的主要观点是堆内存消耗,因为很多对象在微秒内以不同的线程创建,而且我们无法保证GC何时会收集它们。所以这可能会对应用程序的堆和性能问题造成影响。我更正。

timer_tick()
{
 Test objTst=null;
     try
  {
    objTst=new Test();
    objTst.Process();
  }
  catch(execption e){}

  finally
  {
    objTst =null;
  }

}

1 个答案:

答案 0 :(得分:3)

  

请让我知道以下设计对于管理堆/内存和设计模式也是不利的。

这种“模式”没有任何意义。不需要将变量设置为null。一旦方法完成,并且objTst超出范围,即使您未将其设置为null,它也有资格进行垃圾回收。

我还建议不要有一个空的异常处理程序,它只是吞下并完全忽略异常。如果不出意外,你至少应该记录你收到的例外情况。

一般来说,我会把它写成:

private void timer_Tick(object sender, EventArgs e)
{
     var tester = new Test();
     tester.Process();
}

如果您有异常日志记录机制,可以将其包装在try / catch中以处理或记录异常,但不要只是完全吞下它们。