测试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信道),大家可以自己测试一下,或研究一个比较好的方法。
TestRemotingWebService.JPG

ContractedBlock.gif ExpandedBlockStart.gif 使用三种信道调用远程对象和访问Web Service
None.gif      //使用Http信道
None.gif
    public void Http()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif      Stopwatch stopWatch 
= new Stopwatch();
InBlock.gif      stopWatch.Start();
InBlock.gif      MyObject myObj 
= (MyObject)Activator.GetObject(typeof(MyObject), "http://localhost:9001/MyObject");
InBlock.gif      myObj.GetServerTime();
InBlock.gif      stopWatch.Stop();
InBlock.gif      lsbHttp.Items.Add(stopWatch.ElapsedTicks);
ExpandedBlockEnd.gif    }

None.gif     
//使用Tcp信道
None.gif
    public void Tcp()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        Stopwatch stopWatch 
= new Stopwatch();
InBlock.gif        stopWatch.Start();
InBlock.gif      MyObject myObj 
= (MyObject)Activator.GetObject(typeof(MyObject), "tcp://localhost:9002/MyObject");
InBlock.gif        myObj.GetServerTime();
InBlock.gif        stopWatch.Stop();
InBlock.gif        lsbTcp.Items.Add(stopWatch.ElapsedTicks);
ExpandedBlockEnd.gif    }

None.gif     
//使用Ipc信道
None.gif
    public void Ipc()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif      Stopwatch stopWatch 
= new Stopwatch();
InBlock.gif      stopWatch.Start();
InBlock.gif      MyObject myObj 
= (MyObject)Activator.GetObject(typeof(MyObject), "Ipc://MyHost/MyObject");
InBlock.gif      myObj.GetServerTime();
InBlock.gif      stopWatch.Stop();
InBlock.gif      lsbIpc.Items.Add(stopWatch.ElapsedTicks);
InBlock.gif
ExpandedBlockEnd.gif    }

None.gif
None.gif      
//访问Web Service
None.gif
    public void WebService()
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif      Stopwatch stopWatch 
= new Stopwatch();
InBlock.gif      stopWatch.Start();
InBlock.gif      localhost.Service ws 
= new localhost.Service();
InBlock.gif      ws.GetServerTime();
InBlock.gif      stopWatch.Stop();
InBlock.gif      lsbWeb.Items.Add(stopWatch.ElapsedTicks);
ExpandedBlockEnd.gif    }

None.gif    
private void btnHttp_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif      Http();
ExpandedBlockEnd.gif    }

None.gif
None.gif    
private void btnTcp_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif      Tcp();
ExpandedBlockEnd.gif    }

None.gif
None.gif    
private void btnWebService_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        WebService();
ExpandedBlockEnd.gif    }

None.gif
None.gif    
private void btnIpc_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif        Ipc();
ExpandedBlockEnd.gif    }

None.gif
None.gif     
//开始测试
None.gif
    private void btnStat_Click(object sender, EventArgs e)
ExpandedBlockStart.gifContractedBlock.gif    
dot.gif{
InBlock.gif      Int32 Times 
= int.Parse(txtTimes.Text);
InBlock.gif      Int64 Sum 
= 0;
InBlock.gif      
double Ave=0;
InBlock.gif      lsbHttp.Items.Clear();
InBlock.gif      lsbIpc.Items.Clear();
InBlock.gif      lsbTcp.Items.Clear();
InBlock.gif      lsbWeb.Items.Clear();
InBlock.gif
InBlock.gif      
for (Int32 i = 0; i < Times; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif        Http();
InBlock.gif        Tcp();
InBlock.gif        Ipc();
InBlock.gif        WebService();
ExpandedSubBlockEnd.gif      }

InBlock.gif       
//计算平均时间
InBlock.gif
      for(Int32 i=0;i<Times;i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif        Sum 
+= int.Parse(lsbHttp.Items[i].ToString ());
ExpandedSubBlockEnd.gif      }

InBlock.gif      Ave 
= Sum / Times;
InBlock.gif      txtHttp.Text 
= Ave.ToString();
InBlock.gif
InBlock.gif      Sum 
= 0;
InBlock.gif      
for (Int32 i = 0; i < Times; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif        Sum 
+= int.Parse(lsbTcp.Items[i].ToString());
ExpandedSubBlockEnd.gif      }

InBlock.gif      Ave 
= Sum / Times;
InBlock.gif      txtTcp.Text 
= Ave.ToString();
InBlock.gif
InBlock.gif      Sum 
= 0;
InBlock.gif      
for (Int32 i = 0; i < Times; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif        Sum 
+= int.Parse(lsbWeb.Items[i].ToString());
ExpandedSubBlockEnd.gif      }

InBlock.gif      Ave 
= Sum / Times;
InBlock.gif      txtWebService.Text 
= Ave.ToString();
InBlock.gif
InBlock.gif      Sum 
= 0;
InBlock.gif      
for (Int32 i = 0; i < Times; i++)
ExpandedSubBlockStart.gifContractedSubBlock.gif      
dot.gif{
InBlock.gif        Sum 
+= int.Parse(lsbIpc.Items[i].ToString());
ExpandedSubBlockEnd.gif      }

InBlock.gif      Ave 
= Sum / Times;
InBlock.gif      txtIpc.Text 
= Ave.ToString();
ExpandedBlockEnd.gif    }
None.gif HttpChannel httpChannel  =   new  HttpChannel( 9001 );
None.gif      ChannelServices.RegisterChannel(httpChannel,
false  );
None.gif
None.gif      TcpChannel tcpChannel 
=   new  TcpChannel( 9002 );
None.gif      ChannelServices.RegisterChannel(tcpChannel,
false  );
None.gif
None.gif      IpcChannel ipcChannel 
=   new  IpcChannel( " MyHost " );
None.gif      ChannelServices.RegisterChannel(ipcChannel,
false  );
None.gif
None.gif      RemotingConfiguration .RegisterWellKnownServiceType (
typeof  (RemoteObject .MyObject ), " MyObject " ,WellKnownObjectMode.SingleCall);
None.gif      Console.ReadLine();

/Files/zhang3533/RemotingAndWebService.rar

转载于:https://www.cnblogs.com/ruinet/archive/2007/06/26/795705.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值