我正在将一个cpu-heavy 4.0的Windows应用程序移植到.net 4.0 wcf服务。基本上我只是将.net类导入到wcf服务中。
除了在wcf服务上的性能之外,一切运行良好 - 在同一台开发机器上本地运行的aspx.net wcf服务上,需要6267947个刻度(2539ms)的任务使用815349861刻度(13045ms)。
我已经将服务+测试客户端上传到appharbor,其性能与本地计算机一样糟糕 - 我的测试应用程序的链接是:http://www.wsolver.com/。关于如何提高绩效的任何想法?
答案 0 :(得分:3)
检查可能在请求时构建的服务依赖项。这些包含构造函数依赖项和字段/属性依赖项。也许其中一个导致延误?如果是这种情况,请考虑使用单例来实例化长时间运行的类。
您是否确认后续请求仍会导致延迟?
还要创建一个带状的新服务,它可以像Datetime.Now.toString()那样执行简单的操作,并查看它是否存在同样的问题。
答案 1 :(得分:3)
请查看下面的文章和白皮书。我认为他们应该给你足够的具体性能考虑因素来探索,并且可能会有一些非常实用的设置来调整,优化或改变。</ p>
Performance Tuning WCF Services
Optimizing WCF Web Service Performance
Using ServiceThrottlingBehavior to Control WCF Service Performance
答案 2 :(得分:2)
如果需要对复杂数据结构进行耗时的初始化,则应在Application_Start()
中进行一次,并将生成的数据结构分配给MvcApplication对象上的静态变量。在应用程序启动时只执行一次将比在每个请求中执行它快得多。
答案 3 :(得分:1)
我会在13秒内(或几个使用procdump)进行完全内存转储,然后实际查看进程中发生的事情(windbg和sos.dll)。然后,您可以缩小哪个代码是罪魁祸首。
答案 4 :(得分:0)
我认为字典树只加载一次,进入缓存?你不是每次打电话都加载它吗?