你没有搞清内存、缓存和虚拟内存的关系。Windows进程会开辟属于自己的虚拟内存,包括硬盘上的临时文件。
执行查询后,系统会取回你的查询所要求的记录集(这里专业术语称为游标),存入虚拟内存。游标中有多少记录在缓存(物理内存中开辟的块)中影响的是运行的速度。CacheSize 属性 (ADO)指示缓存在本地内存中的 Recordset 对象的记录数。设置和返回值设置或返回必须大于 0 的长整型值。默认值为 1。说明使用 CacheSize 属性可控制提供者在缓存中所保存的记录的数目,并可控制一次恢复到本地内存的记录数。例如,如果 CacheSize 为 10,首次打开 Recordset 对象后,提供者将前面 10 个记录调入本地内存。当在 Recordset 对象中移动时,提供者返回本地内存缓冲区中的数据;一旦移动超过缓存中最后的记录,提供者便将数据源中随后的 10 个记录恢复到缓存。可以在 Recordset 对象的存活期调整该属性的值,但是更改该值只影响随后从数据源调入缓存的记录数。只更改属性值将不会更改缓存中的当前内容。如果恢复的记录少于 CacheSize 的指定值,提供者将返回其余的记录,且不会产生错误。不允许将 CacheSize 设置为零,否则将返回错误。从缓存恢复的记录不反映其他用户对数据源所作的更改。如需强行对所有缓存的数据进行更新,请使用 Resync 方法。CacheSize 属性范例
该范例使用 CacheSize 属性,说明当使用和不使用记录数为 30 的缓存时,所执行的操作在性能上的差别。Public Sub CacheSizeX() Dim rstRoySched As ADODB.Recordset
Dim strCnn As String
Dim sngStart As Single
Dim sngEnd As Single
Dim sngNoCache As Single
Dim sngCache As Single
Dim intLoop As Integer
Dim strTemp As String ' 打开 RoySched 表。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set rstRoySched = New ADODB.Recordset
rstRoySched.Open "roysched", strCnn, , , adCmdTable ' 枚举记录集对象两次并记录已播放时间。
sngStart = Timer For intLoop = 1 To 2
rstRoySched.MoveFirst Do While Not rstRoySched.EOF
' 为性能测试执行一个简单的操作。
strTemp = rstRoySched!title_id
rstRoySched.MoveNext
Loop
Next intLoop sngEnd = Timer
sngNoCache = sngEnd - sngStart ' 以 30 个记录为一组缓存记录。
rstRoySched.MoveFirst
rstRoySched.CacheSize = 30
sngStart = Timer ' 枚举记录集对象两次并记录已播放时间。
For intLoop = 1 To 2 rstRoySched.MoveFirst
Do While Not rstRoySched.EOF
' 为性能测试执行一个简单的操作。
strTemp = rstRoySched!title_id
rstRoySched.MoveNext
Loop
Next intLoop sngEnd = Timer
sngCache = sngEnd - sngStart ' 显示性能结果。
MsgBox "Caching Performance Results:" & vbCr & _
" No cache: " & Format(sngNoCache, _
"##0.000") & " seconds" & vbCr & _
" 30-record cache: " & Format(sngCache, _
"##0.000") & " seconds"
rstRoySched.CloseEnd Sub
执行查询后,系统会取回你的查询所要求的记录集(这里专业术语称为游标),存入虚拟内存。游标中有多少记录在缓存(物理内存中开辟的块)中影响的是运行的速度。CacheSize 属性 (ADO)指示缓存在本地内存中的 Recordset 对象的记录数。设置和返回值设置或返回必须大于 0 的长整型值。默认值为 1。说明使用 CacheSize 属性可控制提供者在缓存中所保存的记录的数目,并可控制一次恢复到本地内存的记录数。例如,如果 CacheSize 为 10,首次打开 Recordset 对象后,提供者将前面 10 个记录调入本地内存。当在 Recordset 对象中移动时,提供者返回本地内存缓冲区中的数据;一旦移动超过缓存中最后的记录,提供者便将数据源中随后的 10 个记录恢复到缓存。可以在 Recordset 对象的存活期调整该属性的值,但是更改该值只影响随后从数据源调入缓存的记录数。只更改属性值将不会更改缓存中的当前内容。如果恢复的记录少于 CacheSize 的指定值,提供者将返回其余的记录,且不会产生错误。不允许将 CacheSize 设置为零,否则将返回错误。从缓存恢复的记录不反映其他用户对数据源所作的更改。如需强行对所有缓存的数据进行更新,请使用 Resync 方法。CacheSize 属性范例
该范例使用 CacheSize 属性,说明当使用和不使用记录数为 30 的缓存时,所执行的操作在性能上的差别。Public Sub CacheSizeX() Dim rstRoySched As ADODB.Recordset
Dim strCnn As String
Dim sngStart As Single
Dim sngEnd As Single
Dim sngNoCache As Single
Dim sngCache As Single
Dim intLoop As Integer
Dim strTemp As String ' 打开 RoySched 表。
strCnn = "Provider=sqloledb;" & _
"Data Source=srv;Initial Catalog=pubs;User Id=sa;Password=; "
Set rstRoySched = New ADODB.Recordset
rstRoySched.Open "roysched", strCnn, , , adCmdTable ' 枚举记录集对象两次并记录已播放时间。
sngStart = Timer For intLoop = 1 To 2
rstRoySched.MoveFirst Do While Not rstRoySched.EOF
' 为性能测试执行一个简单的操作。
strTemp = rstRoySched!title_id
rstRoySched.MoveNext
Loop
Next intLoop sngEnd = Timer
sngNoCache = sngEnd - sngStart ' 以 30 个记录为一组缓存记录。
rstRoySched.MoveFirst
rstRoySched.CacheSize = 30
sngStart = Timer ' 枚举记录集对象两次并记录已播放时间。
For intLoop = 1 To 2 rstRoySched.MoveFirst
Do While Not rstRoySched.EOF
' 为性能测试执行一个简单的操作。
strTemp = rstRoySched!title_id
rstRoySched.MoveNext
Loop
Next intLoop sngEnd = Timer
sngCache = sngEnd - sngStart ' 显示性能结果。
MsgBox "Caching Performance Results:" & vbCr & _
" No cache: " & Format(sngNoCache, _
"##0.000") & " seconds" & vbCr & _
" 30-record cache: " & Format(sngCache, _
"##0.000") & " seconds"
rstRoySched.CloseEnd Sub
解决方案 »
- VC+VBA 如何关闭WORD,50分
- 如何完整的读取textbox里的数值?
- 小妹请教一个关于VB里SQL语句的问题!!!急~~在线等~~
- 求购 True DBGrid Pro 7.0 的注册码,分不够可以再加
- 求自动填浏览器表单的软件或自动上网抓数据的机器人的源码
- SQL Server数据访问问题????????????
- VB如何检验XML文件中的数据是否符合DTD文件的格式?
- 可否说的详细些!如何 使用VB中的webbrowser控件。谢谢!
- 我在单位里写的程序,今天拿到家里来后就用不了了,说:时实错误,类型不匹配
- 我的梦想能成真吗:学VB可以编游戏吗?
- 怎么样在vb里作正则匹配?
- vb中的表格问题
接着,再将一部分存在本地的数据放入缓存以供recordset访问(存入多少由cachesize来设定),当要访问的数据不再缓存中时,再从本地数据中调入缓存(而不是从SQL server上调用)。 不知道访问过程是不是这样的?
2.您提到的“数据源”我认为指的是本地的数据(由sql server返回到本地的数据集),而不是指SQL server上的数据,对不对?3,可否推荐一些讲述 ADO,OLE DB,ODBC的工作原理的资料,书籍。再次感谢