测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)
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 = 0;
double Ave=0;
lsbHttp.Items.Clear();
lsbIpc.Items.Clear();
lsbTcp.Items.Clear();
lsbWeb.Items.Clear();
for (Int32 i = 0; i < Times; i++)
{
Http();
Tcp();
Ipc();
WebService();
}
//计算平均时间
for(Int32 i=0;i<Times;i++)
{
Sum += int.Parse(lsbHttp.Items[i].ToString ());
}
Ave = Sum / Times;
txtHttp.Text = Ave.ToString();
Sum = 0;
for (Int32 i = 0; i < Times; i++)
{
Sum += int.Parse(lsbTcp.Items[i].ToString());
}
Ave = Sum / Times;
txtTcp.Text = Ave.ToString();
Sum = 0;
for (Int32 i = 0; i < Times; i++)
{
Sum += int.Parse(lsbWeb.Items[i].ToString());
}
Ave = Sum / Times;
txtWebService.Text = Ave.ToString();
Sum = 0;
for (Int32 i = 0; i < Times; i++)
{
Sum += int.Parse(lsbIpc.Items[i].ToString());
}
Ave = Sum / Times;
txtIpc.Text = Ave.ToString();
}
HttpChannel httpChannel = new HttpChannel(9001);
ChannelServices.RegisterChannel(httpChannel,false );
TcpChannel tcpChannel = new TcpChannel(9002);
ChannelServices.RegisterChannel(tcpChannel,false );
IpcChannel ipcChannel = new IpcChannel("MyHost");
ChannelServices.RegisterChannel(ipcChannel,false );
RemotingConfiguration .RegisterWellKnownServiceType (typeof (RemoteObject .MyObject ),"MyObject",WellKnownObjectMode.SingleCall);
Console.ReadLine();/Files/zhang3533/RemotingAndWebService.rar
测试Remoting三种信道Http,Tcp,Ipc和Web Service的访问速度 (转)的更多相关文章
- .NET Remoting三种信道Http,Tcp,IPC和Web Service的访问速度比较(转)
Remoting和Web Service是.net中的重要技术,都可用来实现分布式系统开发,如果是不同的平台就只能选择Web Service,但如果是同一平台,就都可以选择了.到底选择那种,当然还有访 ...
- Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式
一.多环境开发 我们平常都是在自己的开发环境进行开发, 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用, 等测试人员测试通过后,我们会将项目部署到生成环境上线使用. 这个时候就有一 ...
- shell 条件测试语句三种方法
1.test -f file 2.[ -f file ] 3.[[ -f file ]] [ -f file1 -a -f file2]逻辑与[ -f file1 -o -f file2]逻辑或 [ ...
- JS中三种字符串连接方式及其性能比较
工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较. 第一种方法 用连接符“+”把要连接的字符串连起来 ...
- JavaScript中三种字符串连接方式及其性能比较
参考地址: https://www.cnblogs.com/programs/p/5554742.html 工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方 ...
- STM32中AD采样的三种方法分析
在进行STM32F中AD采样的学习中,我们知道AD采样的方法有多种,按照逻辑程序处理有三种方式,一种是查询模式,一种是中断处理模式,一种是DMA模式.三种方法按照处理复杂方法DMA模式处理模式效率最高 ...
- angularjs 自定义服务的三种方式
angularjs 中可通过三种($provider,$factory,$service)方式自定义服务,以下是不同的实现形式: // 定义module , module中注入$providevar ...
- SpringMVC 拦截器不拦截静态资源的三种处理方式
SpringMVC提供<mvc:resources>来设置静态资源,但是增加该设置如果采用通配符的方式增加拦截器的话仍然会被拦截器拦截,可采用如下方案进行解决: 方案一.拦截器中增加针对静 ...
- tomcat-四种运行模式和三种部署模式(优化)
四中运行模式如下: 1-bio: 传统的Java I/O操作,同步且阻塞IO. 2-nio: JDK1.4开始支持,同步阻塞或同步非阻塞IO 3-aio(nio.2): JDK7开始支持,异步非阻塞I ...
随机推荐
- Lucene和jackson冲突
今天在使用lucene的时候,想直接在Controller中返回json对象,于是在Spring中配置了JackSon的converter: <bean id="jacksonMess ...
- OpenStack Neutron DVR L2 Agent的初步解析 (一)
声明: 本博客欢迎转载,但请保留原作者信息! 作者:林凯 团队:华为杭州OpenStack团队 OpenStack Juno版本号已正式公布,这是这个开源云平台的10个版本号,在Juno版的Neutr ...
- [转] GDB attach
转:http://blog.csdn.net/wangeen/article/details/14230171 attach是GDB一种重要的debug模式,在MPI程序debug中发挥重要的作用. ...
- [转] DAG算法在hadoop中的应用
http://jiezhu2007.iteye.com/blog/2041422 大学里面数据结构里面有专门的一章图论,可惜当年没有认真学习,现在不得不再次捡 起来.真是少壮不努力,老大徒伤悲呀!什么 ...
- Java基础知识强化87:BigInteger类之BigInteger加减乘除法的使用
1. BigInteger加减乘除法的使用 public BigInteger add(BigInteger val):加 public BigInteger subtract(BigInteger ...
- ssanf()的用法
转载自http://www.cnblogs.com/lyq105/archive/2009/11/28/1612677.html 看着写着不错,就转了,保存一下 C语言函数sscanf()的用法 ss ...
- OD: Windows Kernel Debug
内核调试入门 内核程序运行在内核态,因此不能像对用户态应用程序那样来调试.关于内核调试方面的知识请参考<软件调试>这本书.目前内核调试主要有以下三种方法. 一是使用硬件调试器,它通过特定的 ...
- nyoj 214
//nyoj 214 这个题目和字符串的问题类似,都是给出一组数据,寻找最长的单调递增字符 这一题一开始我用dp做,发现超时,看了下时间,n*n的复杂度,换过一种思路 用类似于栈的方式,来存储每次更新 ...
- HTML学习(1)
1.缩写和首字母缩写<abbr><acronym> <abbr title="etcetera">etc.</abbr> <a ...
- CSS实现垂直居中的常用方法
在前端开发过程中,盒子居中是常常用到的.其中 ,居中又可以分为水平居中和垂直居中.水平居中是比较容易的,直接设置元素的margin: 0 auto就可以实现.但是垂直居中相对来说是比较复杂一些的.下面 ...