代码改变世界

WCF 第四章 绑定 比较各种绑定的性能和可扩展性

2010-11-25 16:06  DanielWise  阅读(1597)  评论(3编辑  收藏  举报
开发人员需要知道绑定的性能和可扩展性特点。当你在与现实中的应用程序打交道时,性能和可扩展性对服务层次的协议和用户体验很重要。用户会对性能表现差的应用抱怨。应用通常不扩展意味着商业对象的需求没有被满足。
      我们已经对WCF中的四个绑定做了简单的性能比较。测试就是一个简单的返回一个256字符串的操作。列表4.23显示了用来在每个绑定间比较性能的服务。
列表4.23 性能测试服务
   public class PerformanceTestService : IPerformanceTestService
    {
        private static string String256;

        static PerformanceTestService()
        {
            String256 = "".PadRight(256, 'x');
        }
        public string Get256Bytes()
        {
            return String256;
        }
    }
      服务在四个不同的绑定上暴露出来: netNamedPipeBinding, netTcpBinding, wsHttpBinding和basicHttpBinding.一个测试客户端依次调用Get256Bytes操作50,000次来比较绑定间的不同。然后我们测量平均使用时间,每秒多少次操作和CPU时间。所有的测试都在一个运行着服务端和客户端的单一工作环境中进行。这样以便于我们可以比较所有绑定的性能。图片4.3显示了每个绑定的平均反应时间。你可以使用反馈时间管理来帮助检查用户体验。
     图片4.4显示了每个绑定每秒的平均操作数量。这个测量在吞吐量上有影响。在测试客户端仅有一个实例用来测试。如果使用多个客户端,那么就会实现额外的吞吐量。每秒有多少次操作是我们用来确定可扩展性的依据。
      可扩展性也应该考虑每次操作所使用的硬件资源。图片4.5尝试通过显示每个操作的消耗来比较可扩展性。MCycles是一种基于对每个操作使用的CPU处理能力的测量方式。为了这个测试目的,我们使用一台Dell 4700, 奔腾4 3.4GHZ处理器的PC,等同于3400MCycles.注意对ws2007HttpBinding,wsHttpBinding和basicHttpBinding绑定的测量相对netTcpBinding或者netNamedPipeBinding绑定有很高的消耗。这是因为需要经常性的交互。
      WCF开发组已经发布了一个关于WCF性能的白皮书(http://msdn2.microsoft.com/en-us/library/bb310550.aspx ).这个白皮书探讨了更多安全设置,诸如事务,消息和混合模式,也对先前的技术比如.NET Remoting,Web Service Enhancements,ASP.NET Web Services和Enterprice Services进行了深入探讨。