[英]Why is it important to dispose/close a WCF client proxy
我听说即使在处理(或关闭)WCF客户端代理也是必不可少的
例如,当使用带有默认绑定配置的BasicHttpBinding时,即使在流行的网页中也应该没问题,对吧?
var clt = new MyServiceClient();
clt.PlaceOrder(foo);
// no dispose
要么
var clt = new ChannelFactory<IOrderService>().CreateChannel();
clt.PlaceOrder(foo);
谢谢
当你完成它们时,它是关闭事物(并处理掉它们)的好习惯 。 (即使你正在阅读/写入文件流,你会不会打开文件流?)副手,我可以看到一些原因:
只有几个原因,我可以想到我的头脑。
创建一个ChannelFactory并打开它是一项昂贵的操作,如果你关心性能,你应该避免每次调用都这样做。
即使使用basicHttpBinding,您的第一个用例也是不对的,因为它可能会为每个瞬时创建一个新的channelfactory。 .NET 3.5 SP1引入了一些ChannelFactory缓存,因此在某些情况下可能没问题。
在你的第二个用例中,如果你缓存并重用了channelfactory,那么处理并不是真正的nesseaary,但请记住你/你的部署人员可以改变绑定@部署时间,缺乏关闭/处置可能会产生巨大的影响。
总之,关闭/处置它总是安全的,这就是MSDN建议的原因。
这实际上取决于客户的类型。 例如,如果您编写一个调用该服务的ASP.NET应用程序,那么缓存代理是一个好主意,因为它的创建很昂贵。
这就是说,一旦你完成任何IDisposable资源,你应该处置它,以便被处置的对象有机会释放它所持有的资源,以便可以从内存中删除它。 如果IDisposable对象具有Close方法,则应首先调用它。
有关这个引人入胜的主题的优秀文章可以在这里找到: http : //msdn.microsoft.com/en-us/magazine/bb985010.aspx
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.