我正在开发一个C# WCF服务,它调用后端c#服务器应用程序。
我们正在对服务进行性能测试。
例如,每个测试可能包括以下步骤-登录-创建应用程序对象(由服务器应用程序在Sql数据库中创建)-删除应用程序对象-注销。
我们使用100个并发用户(即唯一的客户端线程)运行测试,测试步骤之间没有爬升,也没有用户等待时间。
我们在服务器端进行了相当多的优化,这样当我们反复运行测试时(比如100个并发线程,每个线程重复测试步骤25次),测试的结果通常是测试中每个步骤平均1秒的响应时间,这是可以的。
但是,当我们对100个并发用户运行测试,但在每个线程中只运行一次测试时,结果是不一致的--有时测试步骤可能会花费相当长的时间,测试中的一个步骤平均运行时间可能是5秒。
似乎在活动突然爆发的情况下,服务返回不一致的性能结果。
我尝试了几种方法来优化性能。
(为了与客户端兼容,WCF绑定必须是BasicHttpBinding )
我发现可以使用运行测试和可变参数来调优应用程序的性能,但是当我们运行100个并发客户端线程1次重复测试步骤时,我们仍然存在性能更差、更不一致的问题。
我的问题是:优化c# WCF服务的最佳方法是什么,这样它就能很好地响应突然爆发的客户活动?
谢谢。
发布于 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在任何情况下都很好
https://stackoverflow.com/questions/27927078
复制相似问题