3

我正在将一个 cpu-heavy .net 4.0 windows 应用程序移植到一个 .net 4.0 wcf 服务。基本上我只是将 .net 类导入 wcf 服务。

除了 wcf 服务的性能外,一切都运行良好 - 一个需要 6267947 滴答(2539 毫秒)的任务在同一开发机器上本地运行的 aspx.net wcf 服务上使用 815349861 滴答(13045 毫秒)。

我已经将服务 + 一个测试客户端上传到 appharbor,那里的性能和我的本地机器一样糟糕——我的测试应用程序的链接是:http ://www.wsolver.com/ 。关于如何提高性能的任何想法?

4

5 回答 5

3

检查您的服务上可能在请求时构建的任何依赖项。这些包括构造函数依赖项和字段/属性依赖项。也许其中之一导致延迟?如果是这种情况,请考虑使用单例来实例化长时间运行的类。

您是否确认后续请求仍会导致延迟?

还要创建一个新的服务,它可以做一些简单的事情,比如 Datetime.Now.toString() ,看看它是否有同样的问题。

于 2012-02-19T11:10:24.417 回答
3

请查看下面的文章和白皮书。我认为它们应该为您提供足够具体的性能考虑以供探索,并可能提供一些非常实用的设置来调整、优化或更改。

性能调优 WCF 服务

优化 WCF Web 服务性能

使用 ServiceThrottlingBehavior 控制 WCF 服务性能

运输配额

优化 IIS 性能

ASP.NET 性能概述

Windows Communication Foundation (WCF) 与现有分布式通信技术的性能比较

于 2012-02-19T23:18:27.120 回答
2

如果您需要对复杂数据结构进行耗时的初始化,您应该一次性完成Application_Start()并将生成的数据结构分配给 MvcApplication 对象上的静态变量。在应用程序启动时只执行一次会比在每个请求中执行快得多。

于 2012-02-20T23:40:56.857 回答
1

我会在 13 秒内进行一次完整的内存转储(或使用 procdump 进行多次转储),然后仔细查看进程中发生的情况(windbg 和 sos.dll)。然后,您可以缩小哪些代码是罪魁祸首。

于 2012-02-19T22:01:07.550 回答
0

我认为字典树只加载一次,进入缓存?您不是在每次通话时都加载它吗?

于 2012-02-19T11:53:01.623 回答