Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了。到底选择那种,当然还有访问效率上的考虑,同时在Remoting中又有三中信道 Http,Tcp,Ipc,它们又各有差别。HTTP方式的信道在跨越防火墙上有优势;TCP方式的信道常用在局域网内通信,速度比HTTP快很 多;IPC信道用于同一台机器的进程间通信,通信不占用网络资源,速度又比TCP快很多。为了能够实际的比较一下这四者的实际访问速度,我写了个小程序用 测试。这个程序的实现很简单利用Remoting三种信道和Web Service 访问同一个对象(相当于实际项目中的业务层),而这个对象实现返回系统的时间。就这么简单。如果有对Remoting和Web Service不太了解的,也可以通过我这个例子熟悉一下Remoting三种信道的写法差别和Web Service的调用。

下面是程序运行的界面,我使用.net中的最小时间度量:刻度(用毫秒在本机上可能都很难测出它们之间的差别),来测试每次调用所发的时间,并通过多次调 用来测的一个平均时间来比较访问的速度。通过测试可以看得出他们四者得访问速度:ipc>tcp>http>Web Service.(其实Remoting的http信道和Web Service的访问速度还有待比较,跟测试的主机还有一定关系,在我办公室里的一台电脑上好像Web service的访问速度更快于http信道),大家可以自己测试一下,或研究一个比较好的方法。

相关代码:

     //使用Http信道
public void Http()
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
MyObject myObj = (MyObject)Activator.GetObject(typeof(MyObject), "http://localhost:9001/MyObject");
myObj.GetServerTime();
stopWatch.Stop();
lsbHttp.Items.Add(stopWatch.ElapsedTicks);
}
//使用Tcp信道
public void Tcp()
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
MyObject myObj = (MyObject)Activator.GetObject(typeof(MyObject), "tcp://localhost:9002/MyObject");
myObj.GetServerTime();
stopWatch.Stop();
lsbTcp.Items.Add(stopWatch.ElapsedTicks);
}
//使用Ipc信道
public void Ipc()
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
MyObject myObj = (MyObject)Activator.GetObject(typeof(MyObject), "Ipc://MyHost/MyObject");
myObj.GetServerTime();
stopWatch.Stop();
lsbIpc.Items.Add(stopWatch.ElapsedTicks);
} //访问Web Service
public void WebService()
{
Stopwatch stopWatch = new Stopwatch();
stopWatch.Start();
localhost.Service ws = new localhost.Service();
ws.GetServerTime();
stopWatch.Stop();
lsbWeb.Items.Add(stopWatch.ElapsedTicks);
}
private void btnHttp_Click(object sender, EventArgs e)
{
Http();
} private void btnTcp_Click(object sender, EventArgs e)
{
Tcp();
} private void btnWebService_Click(object sender, EventArgs e)
{
WebService();
} private void btnIpc_Click(object sender, EventArgs e)
{
Ipc();
} //开始测试
private void btnStat_Click(object sender, EventArgs e)
{
Int32 Times = int.Parse(txtTimes.Text);
Int64 Sum = ;
double Ave=;
lsbHttp.Items.Clear();
lsbIpc.Items.Clear();
lsbTcp.Items.Clear();
lsbWeb.Items.Clear(); for (Int32 i = ; i < Times; i++)
{
Http();
Tcp();
Ipc();
WebService();
}
//计算平均时间
for(Int32 i=;i<Times;i++)
{
Sum += int.Parse(lsbHttp.Items[i].ToString ());
}
Ave = Sum / Times;
txtHttp.Text = Ave.ToString(); Sum = ;
for (Int32 i = ; i < Times; i++)
{
Sum += int.Parse(lsbTcp.Items[i].ToString());
}
Ave = Sum / Times;
txtTcp.Text = Ave.ToString(); Sum = ;
for (Int32 i = ; i < Times; i++)
{
Sum += int.Parse(lsbWeb.Items[i].ToString());
}
Ave = Sum / Times;
txtWebService.Text = Ave.ToString(); Sum = ;
for (Int32 i = ; i < Times; i++)
{
Sum += int.Parse(lsbIpc.Items[i].ToString());
}
Ave = Sum / Times;
txtIpc.Text = Ave.ToString();
}
HttpChannel httpChannel = new HttpChannel();
ChannelServices.RegisterChannel(httpChannel,false ); TcpChannel tcpChannel = new TcpChannel();
ChannelServices.RegisterChannel(tcpChannel,false ); IpcChannel ipcChannel = new IpcChannel("MyHost");
ChannelServices.RegisterChannel(ipcChannel,false ); RemotingConfiguration .RegisterWellKnownServiceType (typeof (RemoteObject .MyObject ),"MyObject",WellKnownObjectMode.SingleCall);
Console.ReadLine();

.NET Remoting三种信道Http,Tcp,IPC和Web Service的访问速度比较(转)的更多相关文章

  1. 测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)

    Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访 ...

  2. angularjs 自定义服务的三种方式

    angularjs 中可通过三种($provider,$factory,$service)方式自定义服务,以下是不同的实现形式: // 定义module , module中注入$providevar ...

  3. SpringMVC 拦截器不拦截静态资源的三种处理方式

    SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决: 方案一.拦截器中增加针对静 ...

  4. tomcat-四种运行模式和三种部署模式(优化)

    四中运行模式如下: 1-bio: 传统的Java I/O操作,同步且阻塞IO. 2-nio: JDK1.4开始支持,同步阻塞或同步非阻塞IO 3-aio(nio.2): JDK7开始支持,异步非阻塞I ...

  5. asp.net 的三种开发模式

    一, Web Pages 是三种创建 ASP.NET 网站和 Web 应用程序的编程模式中的一种. 其他两种编程模式是 Web Forms 和 MVC(Model View Controller 模型 ...

  6. Servlet实现的三种方法

    (1)方法一: //这是第一个实现servlet的方法.使用时限servlet接口的方法来实现,使用的时候须要引用servlet-api.jar package com.lc; import java ...

  7. spring mvc:拦截器不拦截静态资源的三种处理方式

    方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...

  8. APP开发的三种模式

    Hybrid APP混合开发的一些经验和总结 APP开发的三种模式:Native App .web App.hybrid App 1.原生app 使用原生app (android或iOS)开发APP. ...

  9. SpringMVC 拦截器不拦截静态资源的三种处理方式方法

    方案一.拦截器中增加针对静态资源不进行过滤(涉及spring-mvc.xml) <mvc:resources location="/" mapping="/**/* ...

随机推荐

  1. 转 Objective-C中不同方式实现锁(一)

    为什么需要使用锁,当然熟悉多线程的你,自然不会对它觉得陌生. 那你在代码中是否很好的使用了锁的机制呢?你又知道几种实现锁的方法呢? 今天一起来探讨一下Objective-C中几种不同方式实现的锁,在这 ...

  2. 【docker】docker基础原理,核心技术简介

    关于docker的核心技术,就是以下的三大技术: 1.namespaces [命名空间] 使用linux的命名空间实现的进程间隔离.Docker 容器内部的任意进程都对宿主机器的进程一无所知. 除了进 ...

  3. .NET:CLR via C# Shared Assemblies and Strongly Named Assemblies

    Two Kinds of Assemblies, Two Kinds of Deployment A strongly named assembly consists of four attribut ...

  4. myql --- mysqldump使用方法

    1.mysqldump的几种常用方法: (1)导出整个数据库(包括数据库中的数据) mysqldump -u username -p dbname > dbname.sql (2)导出数据库结构 ...

  5. Android图片加载框架最全解析(八),带你全面了解Glide 4的用法

    本篇将是我们这个Glide系列的最后一篇文章. 其实在写这个系列第一篇文章的时候,Glide就推出4.0.0的RC版了.那个时候因为我一直研究的都是Glide 3.7.0版本,再加上RC版本还不太稳定 ...

  6. 如何读取抓取的wifi包内容

    有密码的WIFI,WIFI的密码会生成一个临时会话密钥,这个临时会话密钥可以用来加密会话内容,也就是说.比如你在浏览网页,用有密码的WIFI,连接上以后,浏览的网页流量是加密了的,所以更安全.无密码的 ...

  7. 最大熵,熵,MLE的解释,还行

    这篇文章: https://blog.csdn.net/jiaoyangwm/article/details/81276921

  8. UNIX域套接字——UNIX domain socket(DGRAM)

    #define UNIX_PATH_MAX 108 #include <sys/types.h> #include <sys/socket.h> #include <sy ...

  9. JavaScript使用技巧精萃

    (一).确认删除用法:   1. BtnDel.Attributes.Add("onclick","return confirm('"+"确认删除?& ...

  10. jquery中filter(fn)的使用研究

    jquery中filter(fn)给出的官方说明是: 筛选出与指定函数返回值匹配的元素集合 这个函数内部将对每个对象计算一次 (正如 '$.each'). 如果调用的函数返回false则这个元素被删除 ...