2

我们正在使用带有 WCF 后端的 ASP.NET MVC 构建一个外联网贷款状态检查网站。它是一个非常标准的设计,MVC 站点使用 WCF 服务引用来获取客户对象。该服务使用 Oracle 后端 + http 绑定,并且不会与 MVC 站点托管在同一台服务器上(因此我们不能使用 tcp 绑定来减少延迟)。

我们遇到的问题是,每次调用服务都会导致 7-8s 的响应时间,这对于外网站点来说是无法接受的,并且远高于 2s 的魔法标记。服务方法调用 12 个存储过程来创建客户对象。不幸的是,数据库是非规范化的(我们无法更改它,因为它也被其他内部生产系统使用)所以大多数调用都是填充客户对象及其关联对象的基本选择语句。服务代理在 MVC 操作中正确打开和关闭/处置,因此没有任何服务连接泄漏的实例。为每个请求创建一个新的客户端代理(即,我们没有为服务使用单例模式)。

有什么想法可以加快速度吗?

谢谢

4

2 回答 2

1

听起来您已经知道问题出在哪里 - 它是数据库。

我从未听说过 WCF 操作的设置和拆除时间超过几分之一秒,不包括内部的任何逻辑。因此,即使您可以减少 1-2 秒的延迟(这可能是一个乐观的估计),但如果数据库操作本身需要 5-6 秒,那也无济于事。

诚实地?运行 12 个存储过程来创建客户是完全不可行的。存储过程的目的是封装执行复杂数据库操作所需的所有逻辑。您需要做的第一件事是将其更改为一个存储过程 - 然后如果它仍然很慢,请分析数据库以查看花费了这么长时间并相应地修复它。通常较差的数据库性能是由于缺少一个或多个索引。

于 2010-02-13T05:19:32.923 回答
0

在您准确衡量实际发生的情况之前,不要太快假设瓶颈在哪里。

您确实需要执行 Oracle 扩展 SQL 跟踪来查看缓慢的来源。除此之外的任何事情大多都是猜测。这是来自 Cary Millsap(方法 R 和以前的 Hotsos)的一篇论文,您可以下载执行此操作的详细信息:

http://method-r.com/downloads/doc_details/10-for-developers-making-friends-with-the-oracle-database-cary-millsap

于 2010-02-13T19:00:27.163 回答