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的访问速度 (转)的更多相关文章

  1. .NET Remoting三种信道Http,Tcp,IPC和Web Service的访问速度比较(转)

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

  2. Java开发学习(三十二)----Maven多环境配置切换与跳过测试的三种方式

    一.多环境开发 我们平常都是在自己的开发环境进行开发, 当开发完成后,需要把开发的功能部署到测试环境供测试人员进行测试使用, 等测试人员测试通过后,我们会将项目部署到生成环境上线使用. 这个时候就有一 ...

  3. shell 条件测试语句三种方法

    1.test -f file  2.[ -f file ] 3.[[ -f file ]] [ -f file1 -a -f file2]逻辑与[ -f file1 -o -f file2]逻辑或 [ ...

  4. JS中三种字符串连接方式及其性能比较

    工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方法,这里将它们一一列出顺便也对它们的性能做个具体的比较. 第一种方法  用连接符“+”把要连接的字符串连起来 ...

  5. JavaScript中三种字符串连接方式及其性能比较

    参考地址: https://www.cnblogs.com/programs/p/5554742.html 工作中经常会碰到要把2个或多个字符串连接成一个字符串的问题,在JS中处理这类问题一般有三种方 ...

  6. STM32中AD采样的三种方法分析

    在进行STM32F中AD采样的学习中,我们知道AD采样的方法有多种,按照逻辑程序处理有三种方式,一种是查询模式,一种是中断处理模式,一种是DMA模式.三种方法按照处理复杂方法DMA模式处理模式效率最高 ...

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

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

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

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

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

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

随机推荐

  1. [置顶] 【SQL】查询重复人名的次数并列出

    select count(姓名) as 重复次数,姓名from 某表 group by 姓名order by 重复次数 asc 首先,group by 姓名,可以将所有相同姓名的项集合在一起.然后,c ...

  2. Opencv学习笔记(六)SURF学习笔记

    原创文章,转载请注明出处:http://blog.csdn.net/crzy_sparrow/article/details/7392345 本人挺菜的,肯定有非常多错误纰漏之处 ,希望大家不吝指正. ...

  3. wpf的学习日志(一)

    今天开始学习wpf,从xaml的布局开始 stackpanel布局:Orientation决定布局的横向还是纵向,HorizontalAlignment决定布局的对齐 <StackPanel O ...

  4. UITableView出现卡顿如何处理

    tableView的beginUpdate和endUpdate要比reloadData和reloadRowsAtIndexPaths好,因为beginUpdate和endUpdate会执行一个动画bl ...

  5. oracle过滤名字中含有_的行

    select * from emp where ename like '%\_%' escape '\'; escape 定义转义字符串,这样转义字符串后的字符就是普通字符.

  6. JavaScript 禁用键盘按钮

    代码写多了,有些使用过的方法和技巧会一时半会想不起来,平日记录下来,方便自己和有需要的人日后查阅. $(document).keydown(function () { if (window.event ...

  7. Redis+PHP扩展的安装和Redis集群的配置 与 PHP负载均衡开发方案

    以前有想过用 Memcache 实现M/S架构的负载均衡方案,直到听说了 Redis 后才发现它做得更好.发了几天时间研究了一下 Redis ,感觉真的很不错,特整理一下! 以下操作都是在 SUSE  ...

  8. wdcp/wdlinux一键包的php5.3版本添加Zend.so 和Soap.so

    Wdcp 安装soap扩展 1.首先进入 soap模块的安装文件,wdcp安装包解压对应的php中有,如:/root/miloxi/lanmp/php-5.5.10/ext/soap 2.执行: (1 ...

  9. PHPCMS V9二次开发]自定义字段模型-文本组

    phpcms v9,我们在做类似于酒店房型等类型的时候,需要用到文本组字段模型,但phpcms并未提供该模型.如下图所示效果: 展示效果如下: 步骤/方法 打开phpcms\modules\conte ...

  10. 数据库和Doctrine(转载自http://www.111cn.net/phper/332/85987.htm)

    对于任何应用程序来说最为普遍最具挑战性的任务,就是从数据库中 读取和持久化数据信息.尽管symfony完整的框架没有默认集成ORM,但是symfony标准版,集成了很多程序,还自带集成了Doctrin ...