我在程序中使用odbc读取数据写到一个第三方的网格控件中,数据库是sql server 2000,操作系统是win 2k server,机器是dell 笔记本 PIII 850 256内存,程序流程大至如下:
crecordset rs;
rs.open(..);
while(!rs.iseof()){
rs.getfieldvalue(...);
写入网格控件;
rs.movenext();
}
1、
当读入一个约100条记录的数据库时,速度还可以。
当读入一个约300条记录的数据库时,竟然要了差不多40秒。在读入数据库数据的时候,不管数据库是否在本地,硬盘读写指示灯在不停的闪,查看任务管理费器,cpu使用高达100%,程序本身使用内存20M左右,而总的内存使用率不到30%,这是为什么???,是不是odbc的问题,如何设置,如何通过提高内存使用率,提高程序运行速度。第三方的网格控件应是没有问题的。
2、
sql server 2000的设置:
我在数据库的企业管理器中重新配置了数据库使用内存配置,动态地配置sql sever 内存最小值为150M,原配置为0,最大值为256M,最小查询内存由原来的1024增为10000。但是在运行过程中,查看任务管理费器,发现sqkserver这个程序使用内存也不过20左右,为什么???怎样设置sql server

解决方案 »

  1.   

    可能是你的记录集打开方式有问题,尽量使用动态只进游标打开(open的参数中设置),速度会快。还有就是SQLSERVER表中索引没有,或索引不好造成的。建立合适的索引速度会大大提高。网格控件的写入效率也是要检查一下,可以试试将写入网格的代码去掉,看看速度是否有大的变化。一般界面数据操作的速度是最慢的。SQLSERVER本身的配置取默认值就行了。另外用ODBC连接比用ADO连接慢许多,如果不是一定要用ODBC最好不用。
      

  2.   

    一般来说做数据库能不用ODBC就不用 运行效率钥弟很多 建议用ADO直接连接 最好是用OLEDB效率最高
    你造成这样得问题主要应该是记录集打开得时候得问题 检索太慢 小数据量没有问题 如果是大数据量就会出现这样得问题 建议建立索引
      

  3.   

    感谢neosu(neo) ,我很想知道,为什么我的内存使用率只有30%,但还是不停的读写硬盘.我的程序没有写入数据的操作,而且数据库也不在本地.
      

  4.   

    你还是用ADO了,用ODBC时,有关数据库的任一操作,都会在TEMP目录下建立一个临时文件,其中保存了表的所有记录.
      

  5.   

    你还是用ADO了,用ODBC时,有关数据库的任一操作,都会在TEMP目录下建立一个临时文件,其中保存了表的所有记录.
      

  6.   

    wistaria(听风听雨):
    能不能把这一操作给去掉