• wcf不同协议的调用效率比较


    项目中使用的wcf服务调用起来反映比较慢,昨天看了下怎么使用tcp协议传输,今天就对tcp和http的调用效率做了一个比较。

    一.寄宿与iis的tcp协议的服务调用和控制台自寄宿http协议的服务调用的比较:

    因为tcp协议不能使用控制台自寄宿,所以用iis来代替,http使用轻量级的自寄宿。

    客户端的调用:

            static void Main(string[] args)
            {
                //比较一下使用http和tcp的性能
                TestHttpService();
                TestTcpService();
                Console.Read();
            }
    
            private static void TestTcpService()
            { 
                 using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>("calculatorservice"))
                 {
                    ICalculator calculator = channelFactory.CreateChannel();
                    using (calculator as IDisposable)
                    {
                        try
                        {
                            DateTime beginTime = DateTime.Now;
                            calculator.Add(1, 2);
                            DateTime endTime = DateTime.Now;
                            Console.WriteLine("tcp调用花费时间:" + (endTime-beginTime).TotalMilliseconds.ToString());    
                        }
                        catch (CommunicationException)
                        {
                            (calculator as ICommunicationObject).Abort();
                            throw;
                        }
                        catch (TimeoutException)
                        {
                            (calculator as ICommunicationObject).Abort();
                            throw;
                        }
                    }
                }
            }
    
            private static void TestHttpService()
            {
                using (HttpService.CalculatorClient client = new HttpService.CalculatorClient())
                {
                    try
                    {
                        DateTime beginTime = DateTime.Now;
                        client.Add(1, 2);
                        DateTime endTime = DateTime.Now;
                        Console.WriteLine("http调用花费时间:" + (endTime - beginTime).TotalMilliseconds.ToString());    
                    }
                    catch (CommunicationException)
                    {
                        (client as ICommunicationObject).Abort();
                        throw;
                    }
                    catch (TimeoutException)
                    {
                        (client as ICommunicationObject).Abort();
                        throw;
                    }
                }
            }

    控制台自寄宿的实现:

    static void Main(string[] args)
            {
                using (ServiceHost host = new ServiceHost(typeof(CalculatorService)))
                {
                    host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "http://127.0.0.1:9999/calculatorservice");
                   if (host.Description.Behaviors.Find<ServiceMetadataBehavior>() == null)
                    {
                        ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
                        behavior.HttpGetEnabled = true;
                        behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/calculatorservice/metadata");
                         host.Description.Behaviors.Add(behavior);
                    }
                  host.Opened += delegate
                    {
                        Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
                    };
     
                     host.Open();
                    Console.Read();
                }
            }

    wcf的调用,使用毫秒级的单位就可以体现出来区别了,运行自寄宿程序,启动iis,第一次调用的速度真是坑,tcp的调用也用了800毫秒,而http竟然用了6秒多:

    第二次运行速度就快了很多,不过http还是比较慢:

    二.wcf应用程序的http协议和控制台寄宿的http协议的效率比较:

    第一次调用:

    第二次调用,vs调试器的效率竟然基本没有变化,被自寄宿的给爆成渣了:

    应该比较一下iis寄宿的http协议的效率,不过老是报错,今天就先到这里,过两天补上,未完待续...

  • 相关阅读:
    对比<input type="text" id="">和<asp:TextBox runat="server" ID="">
    EasyUI 启用行内编辑
    水平居中和transform: translateY(-50%) 实现元素垂直居中效果
    表头的一些解释
    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Login.aspx.cs" Inherits="Login" %>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">详解
    访问远程桌面 步骤
    jQuery EasyUI API 中文文档
    用JavaScript方式创建easyUI datagrid Column Group(列组)
    jquery中innerheight outerHeight()与height()的区别
  • 原文地址:https://www.cnblogs.com/jinshizuofei/p/4157778.html
Copyright © 2020-2023  润新知