请教:WCF速度似乎比Remoting慢
两段极为相似的代码,主要想看看过输与序列化过程两者的用时差异,结果10000次的调用,WCF用了11秒多,remoting用了5秒不到!
这是测试的源代码
Remoting的服务端
public class RemotCalc : MarshalByRefObject, ICalc
{
public CalcInfo Calc(CalcInfo pInfo)
{
CalcInfo info = new CalcInfo();
info.Method = string.Format("back_{0}", pInfo.Method);
info.Para1 = pInfo.Para1;
info.Para2 = pInfo.Para2;
info.Result = pInfo.Result + 999;
return info;
}
}
WCF的服务端
public class WcfCalc : Srv.Interface.ICalc
{
public CalcInfo Calc(CalcInfo pInfo)
{
CalcInfo info = new CalcInfo();
info.Method = string.Format("back_{0}", pInfo.Method);
info.Para1 = pInfo.Para1;
info.Para2 = pInfo.Para2;
info.Result = pInfo.Result + ;
return info;
}
}
代码可以理解为一样的,以下的客户端,两客户端也可以视为一样的过程
WCF客户端
static void Main(string[] args)
{
using(ChannelFactory<Srv.Interface.ICalc> factory = new ChannelFactory<Srv.Interface.ICalc>("Calc2"))
{
Srv.Interface.ICalc calc = factory.CreateChannel();
CalcInfo info = new CalcInfo();
info.Method = "test";
Console.WriteLine("press any key to run...");
Console.ReadLine();
int max = ;
Console.WriteLine("it's run...");
DateTime start = DateTime.Now;
for (int i = ; i < max; i++)
{
CalcInfo res = calc.Calc(info);
}
TimeSpan sp = DateTime.Now - start;
Console.WriteLine("run {0} times use {1}ms ", max, sp.TotalMilliseconds);
Console.ReadLine();
}
}
Remoting客户端
static void Main(string[] args)
{
ChannelServices.RegisterChannel(new TcpClientChannel(), false);
ICalc remoteobj = (ICalc)Activator.GetObject(typeof(ICalc),
"tcp://localhost:6666/Calc");
CalcInfo info = new CalcInfo();
info.Method = "test";
Console.WriteLine("press any key to run...");
Console.ReadLine();
int max = ;
DateTime start = DateTime.Now;
for (int i = ; i < max; i++)
{
CalcInfo res = remoteobj.Calc(info);
}
TimeSpan sp = DateTime.Now - start;
Console.WriteLine("run {0} times use {1}ms ", max, sp.TotalMilliseconds);
Console.ReadLine();
}
不过,有意思的是,我在CalcInfo增加一个集合属性Item,放入100个实例时,情况就完全反过来了。WCF完胜。至此,我感觉在小型的类序列化时,WCF体现不出优势,只有在传输的内容比较多的时候才有优势。
修改后的测试代码
以下是修改后的CalcInfo类
[DataContract]
[Serializable]
public class CalcInfo
{
public CalcInfo()
{
this.Items = new List<CalcItem>();
}
[DataMember]
public string Method { get; set; }
[DataMember]
public decimal Para1 { get; set; }
[DataMember]
public decimal Para2 { get; set; }
[DataMember]
public decimal Result { get; set; }
[DataMember]
public List<CalcItem> Items { get; set; } public static CalcInfo BuildTest(int itemMax)
{
CalcInfo result = new CalcInfo();
for(int i=;i< itemMax; i++)
{
CalcItem item = new CalcItem();
item.Name = "test item name is " + i;
item.Para1 = i;
item.Para2 = i * ;
result.Items.Add(item);
}
return result;
}
}
请教:WCF速度似乎比Remoting慢的更多相关文章
- 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用
一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 . ...
- .Net remoting, Webservice,WCF,Socket区别
传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service).比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务& ...
- 关于通信的关键词UDP/(TCP/IP)/IPC/RPC/.NET Remoting/WebService/WCF/Http 系列
OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行实践: ...
- Remoting、WCF、WebAPI、WCFREST、WebService之间的区别与联系
在.net平台下,有大量的技术让你创建一个服务,像Web Service,WCF,Web API,Remoting,我们来对比一下他们的区别与联系 Remoting Web Service WCF W ...
- WCF服务一:WCF服务简介
一.回顾开发历史: 软件架构的设计经历了:从面向对象程序,到面向组件程序设计,再到面向服务程序设计.这三种方式都致力于同一个目标:封装和重用. 面向对象程序设计:类封装功能并提供代码重用. 面向组件程 ...
- XAF How to: 实现一个WCF Application Server 并配置它的客户端应用
本主题描述了如何实现一个 WCF 中间层应用程序服务器及如何配置 XAF客户端连接到此服务器. 注意 本主题演示可以由解决方案向导自动生成的代码.执行操作时,如果你想要在现有的 XAF 解决方案中实现 ...
- 跟我一起学WCF(13)——WCF系列总结
引言 WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service..NET Remoting.XML Web Service.MSMQ ...
- 年前辞职-WCF入门学习(1,2)
前言 周一的时候辞职了,离开了从12年毕业后8月份开始一直到现在的公司. 辞职之后当然是玩.玩了若干天的游戏,真的是没日没夜啊,但是玩的太坑,怒删游戏.话说上次玩还是在14年7月份.下次还是过年回家再 ...
- WCF揭秘(一)——简单的WCF开发实例
一.WCF是什么 WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发.WCF将DCOM.Remoting.Web Service.WSE.MSMQ.AJAX服务 ...
随机推荐
- 《算法导论》——随机化快排RandomizedQuickSort
今日算法:随机化快排RandomizedQuickSort 基础工作swap交换和partition分治 /* *交换数组的两个元素 *fromIndex和toIndex为要交换的两个元素的索引 */ ...
- ZigBee毕设
毕设题目: —————————————————————————————————————————————————————————————————————————————— 基于Zigbee的智能家居监测 ...
- Spring再接触 IOC DI
直接上例子 引入spring以及Junite所需要的jar包 User.java package com.bjsxt.model; public class User { private String ...
- (转)2018CRM系统最新排行榜
https://www.jianshu.com/p/718cc29de91f 2018CRM系统最新排行榜 深谷幽兰呼 关注 2018.09.04 10:22 字数 1524 阅读 3182评论 0喜 ...
- 2、订单填写页面 /items/write?skuId=10&orderNo=201903211033410001
<template> <div class="write"> <div class="adr" v-if="addres ...
- oracle --hint总结
得到一条sql语句执行计划的常用方法:1.explain plan 命令 2.DBMS_XPLAN包3.sqlplus中的AUTOTRACE开关4.10046事件5.10053事件6.AWR报告或者 ...
- Windows server 2012 R2 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同
Windows server 2012 R2 解决“无法完成域加入,原因是试图加入的域的SID与本计算机的SID相同.”使用克隆的系统时,加域是出现如下问题.“无法完成域加入,原因是试图加入的域的SI ...
- sed (未完,待续)
sed [options] 'command' file(s) options: -e<script>或--expression=<script>:以选项中的指定的script ...
- Git常用命令及场景
Git命令推送到远程分支 1.登录GitHub创建一个远程仓库. https://github.com 2.git init 本地创建一个目录,并初始化一个git仓库. 3.git add 添加文件到 ...
- dom4j 操作总结
在官网https://dom4j.github.io/下载最新的dom4j的jar包,以及配合xpath解析的http://central.maven.org/maven2/jaxen/jaxen/1 ...