为什么VB+SQL的连接比ASP+SQL慢那么多? 都是远程SQL数据库,都是用ADO连接的,为了作比较连接数据库和操作数据库的字符串也是一样的,但是VB+SQL的速度始终很慢,让人无法忍受,让操作无法正常进行。就打开的平均速度来看,VB连接SQL在10秒左右,ASP+SQL在1秒左右,相差竟10倍之多,请问各位朋友可能是什么原因呢? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 那肯定了,两者工作原理是不一样的,VB+SQL是BS结构,SQL服务器只提供数据,并且在执行过程中,V根据数据需要,程序需不停的与SQL联系,相当于本地计算+SQL提供数据;而ASP与SQL则不同,是CS结构,ASP程序的服务器一般为IIS,与SQL服务器应均为远程本地的,也就是IE发一个响应,IIS接受后,进行本地计算,最后把结果反馈给IE端,所以IE端传输的数据量很少,不像VB那样,根据需要,要将所有数据传过来,计算后,再把数据传给SQL。故而如果做VB+SQL,尽量多写存储过程和用户自定义函数,将计算量放到SQL服务器上去,这样的速度就会快得多。 两个说反了,VB+SQL 是CS结构,ASP+SQL是BS结构 楼上是认为一个是远程数据库,一个是本地数据库造成的,但楼主说两个均为远程数据库,居然有这么大的差别,难以想象,因为大家其实用的引擎是一样的,不该差别那么大。况且测试肯定在同一个客户机上做的,路由的差别也不会那么大。奇怪。所以答案就是楼上说的,ASP和库在一个机器上,VB运行在另外的机器上。 回楼上的话:ASP+SQL的经典连接是调用ADO,但这个ADO组件、IIS服务器和SQL服务器同在服务器端,即客户端(WEB端)发出请求到远程服务器的IIS中,IIS执行脚本,调用IIS服务器上的ADO组件,接着调用服务器上的SQL,计算完成后,IIS再将计算结果返回到WEB端,也就是通过网络传输的只有请求和最终的数据,而VB+SQL则不同,本地的ADO组件或ODBC先得调用远程SQL数据库,将需要的数据从网络中传到本地计算机内存中处理,两者在传输数据上本质的区别。不知以上理解是否有误,请楼上指正! 谢谢两位朋友的分析,我在这里需要补充说明几点:1.就我现在的测试而言,ASP所需的IIS也是在本机的,远程服务器上只有SQL服务,所以以上两中连接方式的数据传输流程是一样的。2.存储过程是连接到数据库以后的操作数据过程,运用以后肯定是会提高操作效率的,但是现在比较突出的问题是两者在 连接数据库 时的时间差别。不知道是C/S与B/S模式架构本身的效率差别导致还是其他的什么原因,有过实际操作经验的朋友也可以来发表一下看法。 如果楼主所说:ASP+SQL 和 VB+SQL 中,除了SQL数据器是单独的一台SERVER,其他的IIS、ADO、VB程序都是一同一台CLIENT,那么出现这种情况是不可理解的。因为C/S、B/S它们的数据引擎都是ADO通过ODBC与SQL的1433 PORT进行数据通信。 实值上是不会有差异的。那唯一合理的解释是:数据通信的时间是相同的,只是两种机制处理时出现了问题,要么ASP+SQL和VB+SQL程序算法不同造成的,要么是VB程序的其它因素造成了延时。 将连接字符串改为sqloledb的方式,外网连接速度会比odbc的快很多。 cnsql = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=" & buserid & ";Password=" & bpassword & ";Initial Catalog=" & bdataname & ";Data Source=" & bserver & "," & sqlPort请看:http://community.csdn.net/Expert/topic/4815/4815210.xml?temp=.7074396http://community.csdn.net/Expert/topic/4819/4819291.xml?temp=.6447107 ASP 通过IIS连接可能使用了连接池而VB是每次都建立连接你把所有机器重新启动 再都连接一次看时间是不是还差别很大 因为C/S、B/S它们的数据引擎都是ADO通过ODBC与SQL的1433 PORT进行数据通信。这句话不对,ADO通过什么来操作数据库要看你的引擎的,也就是你的连接串里指定的PROVIDER,ODBC,OLEDB都可以。不过楼主的问题确实奇怪,你的计算运行时间的代码段里只是一个CONNECTION.open,还是包含了把数据放到表格里面呢? to yechat:为了尽可能排除某些原因,两种连接方式我采用的引擎和连接数据库字符串、打开记录字符串都是一样的。to sundy_RAO:我的连接字符串Provider本来是用的就是SQLOLEDB。to province:我计算运行时间的代码段不仅包括Connection.Open,还包括一个Recordset.Open,两者占用的时间是一半对一半。to DeadWolf:都重启之后,效果不是太大。可能连接池有一定的道理,但是这么大差别的原因应该不在于此吧。 楼主是否先用VB连接,再调用ASP连接呢?如果是这样,楼主可以先用ASP连接,然后再调用VB试试,两个连接字符串一样,第一次连接的时候会建立连接,耗费时间比较多 to pcwe2002:先后顺序是反复试过的,谁先谁后的测试结果没有多大的差别。to of123:对,VB和ASP都使用了游标的,使用游标有什么很大的影响吗? of123 说的是 客户端游标 rs.CursorLocation = adUseClient 查询如果提交纪录集的话,在相同条件下基于浏览器的(也就是B/S)传递纪录集的速度应该比C/S的快,其实大多是查询消耗的时间远远小于纪录集在网络上有服务器送到客户端的时间所以楼主可以做两个测试:1、提交一个足够大的纪录集,比如10万条纪录2、只返回一个输出参数看看两次测试的时间差距 纪录集的传递速度跟ADO好像没什么关系 插入内容,有主键,却显示键列信息不足或不正确,求解 autocad二次开发,关于接口问题?//// TRIM函数无法去掉自定义类型变量中的空格 请教一下VB基础的问题 vb调用outlook 你有用vb做的程序,或者组件源代码丢失的烦恼吗,我可以帮你完全恢复成可重新编译的源代码。 一个小问题,它的循环次数为什么是8次???? 在WIN2000里编写程序运行时不在结束任务里显示吗? combo列选问题,高分在线急求! 请教用winsock怎么点对点发送文件?? 求:对一个试题库的处理 使用Grid++Report 后如何打包?
1.就我现在的测试而言,ASP所需的IIS也是在本机的,远程服务器上只有SQL服务,所以以上两中连接方式的数据传输流程是一样的。
2.存储过程是连接到数据库以后的操作数据过程,运用以后肯定是会提高操作效率的,但是现在比较突出的问题是两者在 连接数据库 时的时间差别。不知道是C/S与B/S模式架构本身的效率差别导致还是其他的什么原因,有过实际操作经验的朋友也可以来发表一下看法。
ASP+SQL 和 VB+SQL 中,除了SQL数据器是单独的一台SERVER,其他的IIS、ADO、VB程序都是一同一台CLIENT,那么出现这种情况是不可理解的。因为C/S、B/S它们的数据引擎都是ADO通过ODBC与SQL的1433 PORT进行数据通信。 实值上是不会有差异的。那唯一合理的解释是:数据通信的时间是相同的,只是两种机制处理时出现了问题,要么ASP+SQL和VB+SQL程序算法不同造成的,要么是VB程序的其它因素造成了延时。
cnsql = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=" & buserid & ";Password=" & bpassword & ";Initial Catalog=" & bdataname & ";Data Source=" & bserver & "," & sqlPort请看:
http://community.csdn.net/Expert/topic/4815/4815210.xml?temp=.7074396
http://community.csdn.net/Expert/topic/4819/4819291.xml?temp=.6447107
而VB是每次都建立连接你把所有机器重新启动 再都连接一次看时间是不是还差别很大
这句话不对,ADO通过什么来操作数据库要看你的引擎的,也就是你的连接串里指定的PROVIDER,ODBC,OLEDB都可以。
不过楼主的问题确实奇怪,你的计算运行时间的代码段里只是一个CONNECTION.open,还是包含了把数据放到表格里面呢?
为了尽可能排除某些原因,两种连接方式我采用的引擎和连接数据库字符串、打开记录字符串都是一样的。to sundy_RAO:
我的连接字符串Provider本来是用的就是SQLOLEDB。to province:
我计算运行时间的代码段不仅包括Connection.Open,还包括一个Recordset.Open,两者占用的时间是一半对一半。to DeadWolf:
都重启之后,效果不是太大。
可能连接池有一定的道理,但是这么大差别的原因应该不在于此吧。
如果是这样,楼主可以
先用ASP连接,然后再调用VB试试,
两个连接字符串一样,第一次连接的时候会建立连接,耗费时间比较多
先后顺序是反复试过的,谁先谁后的测试结果没有多大的差别。to of123:
对,VB和ASP都使用了游标的,使用游标有什么很大的影响吗?
rs.CursorLocation = adUseClient
基于浏览器的(也就是B/S)传递纪录集的速度应该
比C/S的快,其实大多是查询消耗的时间远远小于
纪录集在网络上有服务器送到客户端的时间
所以楼主可以做两个测试:
1、提交一个足够大的纪录集,比如10万条纪录
2、只返回一个输出参数
看看两次测试的时间差距