我按照我实际项目的需求,抽取其网络通讯的部分,用.NET远程处理和WCF分别实现,然后测量所耗时间,以此判断两者的性能。
测试配置
WCF和.NET远程处理都用tcp信道,信道不加密,不使用app.config文件。都是用release编译,不优化。
测试中,客户端向服务端获取进入条件,然后申请进入服务端。服务端收到客户端进入申请后,检查客户端的密码和身份资料,然后让它进入。序列图如下。Profile包括一幅139KB的图片。


![]()
测量方法
上面所述的过程在程序中进行20次。我编写了一个批处理文件,令程序每隔30秒运行一次,共运行8次。所以上述过程一共执行20×8=160次。
客户端程序一共启动8次,而服务端程序只启动一次。(为先后8个客户端服务。)
进行三组测试。第一次客户端、服务端在一台机器上,访问、监听localhost;第二次客户端、服务端在一台机器上,访问、监听本机的真正IP地址;第三次分机测试。
所得数据
|
WCF |
.NET远程处理 |
WCF |
.NET远程处理 |
WCF |
.NET远程处理 |
参数 |
ip port path (本机) |
localhost port path
|
分机调用 |
|
288 |
109 |
280 |
1131 |
2972 |
791 |
|
1116 |
92 |
1103 |
1136 |
1133 |
591 |
|
348 |
110 |
864 |
1118 |
1366 |
606 |
|
852 |
109 |
822 |
1155 |
1217 |
580 |
|
859 |
109 |
899 |
1130 |
1183 |
591 |
|
857 |
110 |
837 |
1149 |
1295 |
581 |
|
866 |
87 |
856 |
1115 |
1323 |
502 |
|
829 |
88 |
832 |
1127 |
1463 |
560 |
平均 |
751.88 |
101.75 |
811.63 |
1132.63 |
1494.00 |
600.25 |
标准差 |
283.45 |
10.66 |
233.31 |
13.87 |
606.45 |
83.36 |


结论
只要不使用localhost,.NET远程处理的效率就约是WCF的2.5倍。此结论与Marcin Celej测出的结论相似。
而不是msdn.microsoft.com说的WCF效率比.NET远程处理高25%,微软论坛上用户测出的“差不多”。
测试代码在这里下载,各位大侠能不能帮我看下,测试中是不是有哪里做得不公平?