首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >突发负荷下WCF服务的优化性能

突发负荷下WCF服务的优化性能
EN

Stack Overflow用户
提问于 2015-01-13 16:40:00
回答 1查看 1.3K关注 0票数 0

我正在开发一个C# WCF服务,它调用后端c#服务器应用程序。

我们正在对服务进行性能测试。

例如,每个测试可能包括以下步骤-登录-创建应用程序对象(由服务器应用程序在Sql数据库中创建)-删除应用程序对象-注销。

我们使用100个并发用户(即唯一的客户端线程)运行测试,测试步骤之间没有爬升,也没有用户等待时间。

我们在服务器端进行了相当多的优化,这样当我们反复运行测试时(比如100个并发线程,每个线程重复测试步骤25次),测试的结果通常是测试中每个步骤平均1秒的响应时间,这是可以的。

但是,当我们对100个并发用户运行测试,但在每个线程中只运行一次测试时,结果是不一致的--有时测试步骤可能会花费相当长的时间,测试中的一个步骤平均运行时间可能是5秒。

似乎在活动突然爆发的情况下,服务返回不一致的性能结果。

我尝试了几种方法来优化性能。

(为了与客户端兼容,WCF绑定必须是BasicHttpBinding )

  • 更改WCF配置中的serviceThrottling maxConcurrentCalls和maxConcurrentSessions参数
  • 使用信号量来限制Wcf服务中并发请求的数量
  • 将wcf服务中的方法实现为任务( .net版本为4.5 )
  • 使方法异步任务
  • 使用ThreadPool优化setMinThreads的大小
  • 使用自定义属性扩展WCF以实现自定义ThreadPool,如本文( http://msdn.microsoft.com/en-us/magazine/cc163321.aspx )所示

我发现可以使用运行测试和可变参数来调优应用程序的性能,但是当我们运行100个并发客户端线程1次重复测试步骤时,我们仍然存在性能更差、更不一致的问题。

我的问题是:优化c# WCF服务的最佳方法是什么,这样它就能很好地响应突然爆发的客户活动?

谢谢。

EN

回答 1

Stack Overflow用户

发布于 2015-01-13 17:03:57

因此,这里有一件好事要做:

1-检查一致性连接。有时小型服务器可能限制在2到50之间,这是非常低的。您的服务器管理员应该知道该做什么。

2-使用WCF进行负载平衡是可能的,并且在多个服务器上拆分时会有很大帮助。

3-让IIS主机服务器只执行IIS工作。也就是说,它上也没有运行SQL

4-不要打开WCF服务连接,查询,关闭每个请求连接。每一次都需要握手,随着时间的推移,多个用户会因此而浪费大量的时间。相反,在应用程序启动并在退出时关闭连接一次(显然是错误的)。

5-在服务中使用较小的类型。尝试避免诸如十进制、int64之类的类型。十进制为128位,int64为64位,执行速度比浮点数/双/int慢得多。显然,如果你绝对需要使用它们,那么就使用它们,但尽量限制它们。

6-一个单一的大方法使每个人的总体计时更慢,因为等待线增长得更快和更慢的IIS,如果您有大量的用户因为超时而失去新的连接。但是更小的方法对每个人来说都要花费更长的时间,因为额外的来回数据,但用户会看到更多的进步,并会觉得软件更快,即使它真的不是。

BasicHttpbinding在任何情况下都很好

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27927078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档