我们有一个动态链接库作为中间层之间的网站前端和我们的后端票务系统。插入到票务系统中的方法解释起来有点复杂,但简而言之,它很慢。我得到的最好的情况是9秒的提交时间。
然而,真正的问题是,我只能通过Windows应用程序获得这段时间,而不能通过ASP.NET网站。我已经设置了一个Windows测试应用程序和一个用于测试的网页,即使代码在它们之间复制,网页也会在17-20秒内提交,而windows应用程序会在8-11秒内提交。
是什么导致了这种情况呢?
编辑:回答以下几个问题……
对web服务的调用占用了大部分时间,但我无法控制此web服务,因为它是由票务系统供应商提供的。我需要找出为什么web服务在从不同类型的应用程序调用时花费了不同的时间。这两种情况下的代码是完全相同的,它运行一个循环,然后报告记录的时间。
代码是:
for (int i = 0; i < numIterations; i++)
{
startTimes[i] = DateTime.Now;
try
{
cvNum = Clearview.Submit(req, DateTime.Now, DateTime.Now, false);
}
catch (Exception ex)
{
exceptionCount++;
lblResult.Text += @"<br />Exception Caught: " + ex.Message + @"<br />";
}
endTimes[i] = DateTime.Now;
}在这两种情况下都是相同的循环,并且我在调用库之前和之后标记了时间,库进行进一步的处理,然后调用web服务。但是这个过程应该是一致的,不是吗?我在调试期间进行了跟踪,没有看到任何延迟到达实际的web服务调用...
再次编辑:使用Ants,在这两种情况下,99.4%的时间都是在web服务调用时发送的。似乎没有什么区别...除了当超时时,网页比windows应用花费更长的时间。
发布于 2008-10-14 17:52:23
你是在同一台机器上运行这两个程序吗?您呼叫的中间层是否位于远程机器上?您提到的持续时间隐约感觉像是DNS超时问题,因为打开连接会导致第一个(关闭/错误寻址) DNS响应超时。您确定将DLL指向中间层的配置文件/var在两次调用中都是相同的吗?
我赞同使用Wireshark来查看正在发生的事情。您至少可以确信,后端处理时间是(无论如何应该是)相同的……
发布于 2008-10-14 17:30:17
web服务相对于web服务器的位置可能会有问题。此外,web UI中的页面结构和其他处理可能会影响应用程序处理所需的时间。
正如前面提到的,在两端记录项目是一个很好的想法,如果这不能满足您的需求,您可以尝试使用诸如Red Gate的Ants profiler之类的性能分析器,它可以帮助识别大部分时间正在使用的行、方法或类。
发布于 2008-10-14 16:59:04
在你的应用程序的两边添加日志--这会告诉你时间在哪里。如果这样还不能解决问题,可以使用Wireshark来跟踪网络活动。
https://stackoverflow.com/questions/201933
复制相似问题