使用COM对象的经典ASP页面非常慢

时间:2014-03-26 10:04:44

标签: sql-server iis asp-classic com+

首先,我想提前说一下这个问题的一些细节可能有点模糊,因为它与商业代码有关,我显然无法透露。但无论如何,这里也是。

我目前正在处理基于.Net的Web应用程序,该应用程序在某些领域也有经典ASP页面 - 该应用程序具有后端MSSQL数据库。应用程序的经典ASP区域的数据访问由添加到IIS服务器上的组件服务中的32位DLL处理。该应用程序最近已更改,因此所有组件(IIS身份验证,.Net应用程序池和添加到组件服务的数据访问DLL)现在都在一个Windows帐户下运行。

我最近发现的问题是,虽然.Net数据访问数据库的速度非常正常,但通过COM +组件进行的经典ASP数据访问速度非常慢。不幸的是,这似乎并没有在任何地方抛出任何错误,不是在IIS日志中而是在事件查看器中。

COM +组件以标准方式实例化,这是在需要数据访问的任何ASP页面上引用的包含文件中完成的,例如。

var objDataProvider = Server.CreateObject("DataAccess.DataProvider");

ASP页面然后使用COM +中的方法执行诸如;

之类的查询
objDataProvider.Query(...)
objDataProvider.Exec(...)

我已经在IIS中为任何花费超过20秒的ASP页面启用了失败的请求跟踪,并且可以看到大多数调用正在处理记录集,如下例所示。

if(rsri.EOF)

theReturn = rsData(0);

以上两个例子都需要花费9秒才能运行。分析在后台运行的SQL显示它在几毫秒内运行,这表明问题在于COM +将数据返回给ASP或ASP处理它的速度很慢。

  • Windows Server 2008 R2 SP1(64位)
  • Intel Xeon CPU
  • 2GB RAM

有没有人遇到类似情况之前或能够指出我可能有帮助的任何进一步诊断的方向?

3 个答案:

答案 0 :(得分:1)

经过几天的捣乱,我终于找到了答案,这是回归基础时解决的最简单的问题。

托管应用程序的Web服务器位于DMZ中,并且需要SQL Server的hosts文件条目。一旦添加,应用程序就会再次飞行。

答案 1 :(得分:0)

你必须自己走得更深。我曾在Ants Performance Profiler之前使用过,以提高.Net应用程序的性能。它似乎也可以分析COM +。

http://www.red-gate.com/products/dotnet-development/ants-performance-profiler/walkthrough

这个或其他类似的分析工具是我看到解决问题的唯一选择。

答案 2 :(得分:0)

我遇到了同样的问题。我已经将iis服务器从W2003-SQL express 2005迁移到W2012R2-SQL Server 2014 express,而asp脚本慢了2倍。 内部的sql查询以相同或更好的速度执行,我在本地测试服务器以丢弃互联网带宽问题。我认为这可能是一个dns问题。

您在hosts文件中做了哪些更改?并且,您使用了什么SQL字符串连接或连接类型? 感谢