最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
asp.net中WCF 客户端关闭带来的性能分析
时间:2022-06-25 08:39:59 编辑:袖梨 来源:一聚教程网
这里的WCF异步调用是指单向非可靠异步调用,也就是你不知道调用是否成功,适用于性能高于可靠性的场合。
之前发布过一篇随笔WCF异步调用实战:OneWay+Asynchronous Operation,通过WCF服务端“单向(One-way)消息交换”+WCF客户端“异步信道调用(Asynchronous Operation)”实现快速的WCF异步调用。
但是,使用了一段时间,发现还是有些慢。今天实测了一下,调用代码如下:
代码如下 | 复制代码 |
var client = new ExternalService.FeedWcf.FeedServiceClient(); client.CreateAsync(...); try { client.Close(); } catch { client.Abort(); } |
实测下来,上面的调用耗时100~300毫秒左右。慢!
当时有点想不明白,都已经异步了,怎么还会慢?
于是改为更直接的异步调用 —— Task.Factory.StartNew(),代码如下:
代码如下 | 复制代码 |
Task.Factory.StartNew(() => { var client = new ExternalService.FeedWcf.FeedServiceClient(); client.CreateAsync(...); try { client.Close(); } catch { client.Abort(); } } ); |
实测下来,调用耗时0~5毫秒,这才是异步的效果。
WCF客户端的异步怎么了?查看WCF客户端代理类的代码,异步调用部分也没问题。
...
后来,恍然大悟,原来问题不在异步调用(client.CreateAsync),而是在WCF客户端的关闭(client.Close)。
于是,专门针对client.Close()进行测试,发现时间全耗在这里(100~300毫秒)!
目前还没找到“如何在异步调用时关闭WCF Client”的解决方法,先用Task.Factory.StartNew()凑合着,让WCF客户端在另外一个线程中慢慢关闭
相关文章
- 《无限暖暖》织衣蛛获得方法 12-26
- 《无限暖暖》美食家蜜蜂获得方法 12-26
- 《无限暖暖》泳镜蝽获得方法 12-26
- 《无限暖暖》芭蕾豆娘获得方法 12-26
- 《无限暖暖》刺绣蛾获得方法 12-26
- 《无限暖暖》尖帽仙获得方法 12-26