使用 using 语句算不算最佳实践
17 号下午参加了微软的笔试,从武汉返回长沙的路上不由的琢磨里面的题
不过有一道涉及.net 的题目到让我犹豫不小。原题记不起来了:大意是 C++和CLR 在内存管理方面的有什么不同?选项里面有一条是:对于非托管的对象,使用 using 语句是最佳实践。
在C#中使用using语句可以使得那些实现了IDisposable接口类型有更为简化的异常处理方式,编译器自动产生一个try块和finally块,并在finally块中将变量转换成为一个IDisposable接口。
然而频繁的调用Dispose对于垃圾收集器来说会加大其负担,《Effective C#: 50 Specific Ways to Improve Your C#》里也有两个Item讨论涉及到了using语句的使用场景,其中Item 16: Minimize Garbage给出了频繁的垃圾收集带来的负面影响,原书给出的示例代码:
protected override void OnPaint( PaintEventArgs e )
{
// Bad. Created the same font every paint event.
using ( Font MyFont = new Font( "Arial", 10.0f ))
{
e.Graphics.DrawString( DateTime.Now.ToString(),
MyFont, Brushes.Black, new PointF( 0,0 ));
}
base.OnPaint( e );
}
方法OnPaint在每次刷新时候都被调用到,那么每次调用时候都会创建一个新的Font对象,尽管这些对象都是相同的设置。
所以最好写成:
private readonly Font _myFont =new Font( "Arial", 10.0f );
protected override void OnPaint( PaintEventArgs e )
{
e.Graphics.DrawString( DateTime.Now.ToString( ),
_myFont, Brushes.Black, new PointF( 0,0 ));
base.OnPaint( e );
}
基于这样的考虑,选择答案时候我不得不犹豫一会,最后还是认同了“最佳实践的说法”,如果是你选择呢?
ps:我想疑惑的根源在于对“最佳实践”的理解吧。

浙公网安备 33010602011771号