问题描述
先说一下本地开发环境WIN8.1(64位)+IIS8.5+VS2012+oracle驱动(instantclient_11_2)在本地测试webservice中的一个方法速度非常快1-2秒左右。注:该方法直连ORACLE数据库,6表关联查询一个的销售数据,其中有两张表已过千万,索引机制很好,在PLSQL中查询并不慢,平均1秒左右即可。下边是服务器配置环境winserver2008(64位)+iis7.5+oracle驱动(instantclient_11_2)在该服务器中调用同样的WEBSERVICE中的同样的方法,且连接数据库也是一样,web.config配置也都一样。页面就一直处于等待状态,大概要30秒才能够执行完。且在服务器也安装了PLSQL,并执行相同SQL语句也是1秒左右就完成了。也就说数据库查询在两台机器都是1秒左右。注:当查询4天以内的销售数据的时候,WEBSERVICE响应为10秒以内。问题:为什么调用WEBSERVICE后,在服务器就得30秒左右,而我本机就2秒左右。我实在是想不明白了,望大家出手相救吧!
解决方案
解决方案二:
给webservice的各个阶段都加log,用来跟踪看具体是哪里慢。比如在Global的applicationstart/sessionstart里加上事件,你的webservice构造函数里加log/静态构造加log,如果用了IOC就在ioc里也加log,你的方法起始位置加log,中间预计耗时的部分也加log,最终看输出的log里的时间,可以确定到底是哪一步耗时。然后再研究方案
解决方案三:
机器配置及网络因素
解决方案四:
1-2秒很快?我们的大多数tcp服务功能,一般都在十几毫秒、慢则几十毫秒响应。当然如果改为webservice机会慢许多倍,所以我们只在业余开发人员编程时才让其用webservice、wcf之类的。
解决方案五:
当然如果你查询数据库需要1秒,那么封装通讯数据的size,以及其机制是否过于臃肿,可能就不能立刻显出问题来了。特别是当你不通过远程网络来测试时,更是难以发现。但是如果你一直坚持选择轻量级的通讯方式,避免使用“貌似挺厉害”的过度封装的东西,可以很自然地就避免一些这类问题。如果你的通讯部分是自己写的百十来行代码,比如说你自己控制缓存、压缩、格式等等,则更好。
解决方案六:
看起来服务器到数据库没有问题,是不是服务器到客户端(browser)传输太多的东西了?