最近在写一个vb.net客户端链接远程数据库的程序,发现程序和数据库交互效率特别低。本来怀疑数据库服务器带宽的问题,但是今天监控了一下各个环节的耗时,结果让我很惊讶,哪位高人能指点一下为什么效率是在fill环节这么低,我想要提高效率应该在哪里做一些优化
Dim m_SqlConn As MySqlConnection
m_SqlConn = Nothing
Try
Dim str As String
str = "1:" & get_now() & Now.Millisecond
m_SqlConn = connect_sql()
str = str & vbCrLf & "2:" & get_now() & Now.Millisecond
Dim strQuery As String = "select name from xxxx "
Dim daAdapter As MySqlDataAdapter = New MySqlDataAdapter(strQuery, m_SqlConn)
str = str & vbCrLf & "3:" & get_now() & Now.Millisecond
Dim dsTable As DataSet = New DataSet
str = str & vbCrLf & "4:" & get_now() & Now.Millisecond
daAdapter.Fill(dsTable)
str = str & vbCrLf & "5:" & get_now() & Now.Millisecond
MsgBox(str)
Catch
MsgBox("连接数据库出现异常,请检查你的网络,点击退出!")
Finally
m_SqlConn.Close()
End Try
如上是我的代码简化版,我监控了一下各个步骤的耗时,在第4步以前都是毫秒级的,时间完全一致,在第4步到第5步之间居然耗时1.5S,没错,是1.5S而不是1.5毫秒,这让我非常不能理解,请各位指点。为什么是这样
------解决方案--------------------
请你告诉我,凭什么你认为fill应该是1.5毫秒呢?
比如说我写1000行代码的一个程序,而你不过是声明了三个变量,给第一个变量设置了一个叫做“数据库连接”字符串的属性,给第二个变量变量传了一个(或者两个)叫做“查询Sql语句”的字符串属性,第三个变量不过是定义了一下类型名称,而真正的连接数据库、等待数据库响应、查询数据、等待数据库返回数据、对数据进行解析、创建内存数据库结构等等比你的代码多一万倍功能的工作,都是我的方法做的。你凭什么要求我的方法跟你的三个变量的声明速度一样?
------解决方案--------------------
你应该使用ado.net自己写,并且自己创建一个DataSet来保存数据。这样就知道问题出在哪里了。
------解决方案--------------------
也许Fill的时候才是真正的连接数据库,执行查询,返回结果,填充DataSet