我应该总是隐式地处理WCF服务客户端和数据上下文吗?

时间:2009-11-04 16:43:10

标签: c# .net

VS 2010 Beta Code Analysis建议我始终为LINQ to SQL部署WCF服务客户端和数据上下文。这是可取的吗?我认为这最终会发生。隐含或根本不这样做的利弊是什么?

1 个答案:

答案 0 :(得分:2)

任何IDisposable,确保及时清理,关闭开放资源等(连接等)是您的工作。所以简而言之,是的。终结器仅在GC启动时发生,这可能需要很长时间 - 并且不允许最佳池化使用等。

但请注意,WCF具有躲闪Dispose()实施的历史记录,使得只是 using有点命中(您可能会失去实际的异常)。当然,也建议通过异步方法使用WCF,这再次使得using难以使用;你经常需要保留一个引用并在IO回调中明确地调用Dispose()


重新评论你的意见;几个例子:

  • SqlConnection:如果你把它留在(打开),你可以防止它重新使用池中的连接;你可以通过这种方式最终使可用的连接饱和,打破你的应用
  • GDI:IIRC,VS2005本身(或2003?)有一个错误,其中有一个不加掩饰的GDI对象; GDI对象不需要太多内存,因此它没有触发GC,但是它用完了可用的句柄并且坏了(这也是用户代码中常见的错误,但在IDE中更为出名)
  • 无法处置类似FileStream的内容:您已阻止文件系统
  • 无法处置TransactionScope而您导致db(etc)阻止