两段极为相似的代码,主要想看看过输与序列化过程两者的用时差异,结果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慢的更多相关文章

  1. 跟我一起学WCF(2)——利用.NET Remoting技术开发分布式应用

    一.引言 上一篇博文分享了消息队列(MSMQ)技术来实现分布式应用,在这篇博文继续分享下.NET平台下另一种分布式技术——.NET Remoting. 二..NET Remoting 介绍 2.1 . ...

  2. .Net remoting, Webservice,WCF,Socket区别

    传统上,我们把计算机后台程序(Daemon)提供的功能,称为"服务"(service).比如,让一个杀毒软件在后台运行,它会自动监控系统,那么这种自动监控就是一个"服务& ...

  3. 关于通信的关键词UDP/(TCP/IP)/IPC/RPC/.NET Remoting/WebService/WCF/Http 系列

    OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行实践: ...

  4. Remoting、WCF、WebAPI、WCFREST、WebService之间的区别与联系

    在.net平台下,有大量的技术让你创建一个服务,像Web Service,WCF,Web API,Remoting,我们来对比一下他们的区别与联系 Remoting Web Service WCF W ...

  5. WCF服务一:WCF服务简介

    一.回顾开发历史: 软件架构的设计经历了:从面向对象程序,到面向组件程序设计,再到面向服务程序设计.这三种方式都致力于同一个目标:封装和重用. 面向对象程序设计:类封装功能并提供代码重用. 面向组件程 ...

  6. XAF How to: 实现一个WCF Application Server 并配置它的客户端应用

    本主题描述了如何实现一个 WCF 中间层应用程序服务器及如何配置 XAF客户端连接到此服务器. 注意 本主题演示可以由解决方案向导自动生成的代码.执行操作时,如果你想要在现有的 XAF 解决方案中实现 ...

  7. 跟我一起学WCF(13)——WCF系列总结

    引言 WCF是微软为了实现SOA的框架,它是对微乳之前多种分布式技术的继承和扩展,这些技术包括Enterprise Service..NET Remoting.XML Web Service.MSMQ ...

  8. 年前辞职-WCF入门学习(1,2)

    前言 周一的时候辞职了,离开了从12年毕业后8月份开始一直到现在的公司. 辞职之后当然是玩.玩了若干天的游戏,真的是没日没夜啊,但是玩的太坑,怒删游戏.话说上次玩还是在14年7月份.下次还是过年回家再 ...

  9. WCF揭秘(一)——简单的WCF开发实例

    一.WCF是什么 WCF是微软为了实现各个开发平台之间的无疑缝连接而开发一种崭新工具,它是为分布式处理而开发.WCF将DCOM.Remoting.Web Service.WSE.MSMQ.AJAX服务 ...

随机推荐

  1. JavaScript获取、修改CSS样式合辑

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  2. leetcode338

    public class Solution { public int[] CountBits(int num) { ]; ; i <= num; i++) { ; var cur = i; do ...

  3. input 选择框改变背景小技巧

    最近在项目中遇到一个问题,想要改变input选择框的背景,然而,令我没有想到的是,竟然无法直接改变背景的颜色 通常情况下:我们都可以通过改变元素的 background-color 的值来改变元素的背 ...

  4. mvc:view-controller标签使用

    mvc:view-controller可以在不需要Controller处理request的情况,转向到设置的View,完成无Controller的path和view的直接映射. 1.重定向 <m ...

  5. ReactiveX 学习笔记(23)RxCpp

    RxCpp RxCpp 是 ReactiveX 的 C++ 语言实现. 下载 RxCpp $ git clone --recursive https://github.com/ReactiveX/Rx ...

  6. Intersect交集Except差集Union并集实例

    int[] oldArray = { 1, 2, 3, 4, 5 };int[] newArray = { 2, 4, 5, 7, 8, 9 };var jiaoJi = oldArray.Inter ...

  7. 用 Python + itchat 写一个爬虫脚本每天定时给女朋友发微信暖心话

    https://github.com/sfyc23/EverydayWechat.git

  8. Python中*和**的作用(课堂小结)

    以前自学没注意过参数的传导中*和**的用法,这次趁着上课了解了一下,顺便写个随笔记一下. 1.打包用法 在参数传导中*args是不定长参数,传入的参数是不限制个数的,比如 def bdc(*args) ...

  9. jstat查看JVM GC情况

    转自 https://www.cnblogs.com/yjd_hycf_space/p/7755633.html

  10. 求树的重心 poj 1655

    题目链接:https://vjudge.net/problem/POJ-1655 这个就是找树的重心,树的重心就是树里面找一个点,使得以这个点为树根的所有的子树中最大的子树节点数最小.题目应该讲的比较 ...