如果以下设计不利于管理堆/内存并且从设计模式的角度来看,请告诉我。
在这里,我在Windows服务上使用C#Timers.Timer
,其中时间戳事件在多个线程上触发。
这里我的主要观点是堆内存消耗,因为很多对象在微秒内以不同的线程创建,而且我们无法保证GC何时会收集它们。所以这可能会对应用程序的堆和性能问题造成影响。我更正。
timer_tick()
{
Test objTst=null;
try
{
objTst=new Test();
objTst.Process();
}
catch(execption e){}
finally
{
objTst =null;
}
}
答案 0 :(得分:3)
请让我知道以下设计对于管理堆/内存和设计模式也是不利的。
这种“模式”没有任何意义。不需要将变量设置为null
。一旦方法完成,并且objTst
超出范围,即使您未将其设置为null
,它也有资格进行垃圾回收。
我还建议不要有一个空的异常处理程序,它只是吞下并完全忽略异常。如果不出意外,你至少应该记录你收到的例外情况。
一般来说,我会把它写成:
private void timer_Tick(object sender, EventArgs e)
{
var tester = new Test();
tester.Process();
}
如果您有异常日志记录机制,可以将其包装在try
/ catch
中以处理或记录异常,但不要只是完全吞下它们。