当前位置:编程学习 > VB >>

救命啊,如何提高VB程序的运行速度

    本人最近为公司开发了一个VB+Access的图纸管理系统,包括来图,绘图,检图,编程,图纸上传等等一系列的流程管理,还有用户管理,权限管理等等其他一些辅助性的模块,分成不同的界面进行管理。数据库放在服务器上面,在测试之前导入了以前的老系统的数据有七、八万条,现在单机功能测试是没有问题了,用户比较满意,速度也比较快。但是当多用户测试的时候速度非常慢,特别是登陆的时候居然要等个一两分钟,登录之后每点击打开一个界面也都要至少四五秒。这样的系统肯定是不能满足用户需要的。
    我也想了一些优化措施,比如在主要的表上建立索引,对象用完之后释放资源。稍有改善,但是还是非常不满意。
    现在兄弟我垂头丧气,日暮途穷,无计可施,辛苦做成的程序不能使用,这真是最最悲哀的事情,就好像把美女骗到了房间扒掉了衣服到了最后一步自己却解不开皮带了。唯有冰天雪地裸睡钢板以示我的诚心,上穷碧落下黄泉,中间的我好可怜!俗话说得好,帮兄弟一把,胜造七级浮屠。盼望VB高手出手相助,临表涕零,不知所云,呜呼哀哉~ 可以用异步加载RS的方式,这样表面上是不会卡,但是显示出来时间还是少不了的
也可以每次只显示一条,这样也会快多 可以做成网站IIS ASP+客户端的方式,这样肯定是飞速的

起码得做成三层结构,aceess 就好像把美女骗到了房间扒掉了衣服到了最后一步自己却解不开皮带了。唯有冰天雪地裸睡钢板以示我的诚心,上穷碧落下黄泉,中间的我好可怜
-------------------------------------
这话有意思.

七八万条数据,用Access来跑,确实是个问题,楼主是否想过,用sql server2000来代替Access
你已经建索引了,速度还是那么慢,那还能什么办呢?
估计你是把图纸数据放到了数据库里了吧,如果是这样肯定会慢,即使你用VC都不管用,因为这是架构方案上的问题,所以你只需要把图纸的数据通过文件形式存储,数据库记录文件路径而不是具体数据,然后开个IIS供客户端下载文件,这样速度就会快了。 同意楼上。

我以前做过的一个系统就是如此。将图片文件按目录存放,数据库仅写入必要信息已经文件路径。

当你把图片文件放进数据库时,记录集的就会变得很大,它的游标缓存就需要占用很大的虚拟内存。

虚拟内存是由内存 RAM 和磁盘空间构成的,系统会根据用户访问的情况将磁盘内容导入 RAM。一个用户的时候,访问的区域是相对固定的,大多数的操作是在 RAM 中完成,因此速率尚可。当多用户访问时,每一个用户访问的数据表位置不同,交叉操作中会产生大量的磁盘交换,速度肯定是很慢了。

因此,数据库要尽可能精简。

还有,不要在查询中处理或比对很多字符串。比较讲究的应用,常用字符串都是用编码表示的,另外有编码表提供最终显示内容。比如,地域信息的省市县,就是用三级编码来表示。 Access 不适合多用户应用!
既然有服务器,换 SQL Server 吧。
引用 5 楼 SupermanKing 的回复:
估计你是把图纸数据放到了数据库里了吧,如果是这样肯定会慢,即使你用VC都不管用,因为这是架构方案上的问题,所以你只需要把图纸的数据通过文件形式存储,数据库记录文件路径而不是具体数据,然后开个IIS供客户端下载文件,这样速度就会快了。


兄弟,我当然不会把上传的图纸放到数据库里面,我只把上传的文件名,保存路径,上传人,上传时间保存在一个表里面,上船的图纸我是放到服务器上面一个专门的文件夹里面,所以不是这个问题。至于有兄弟提到的安装sql server服务器,因为公司现在打击盗版,要安装正版的要产生费用,申请比较麻烦,不过我试一下了。一定要把我的皮带给解开了拿下美女。 SQL有桌面版的,那个不要钱
引用 8 楼 zz801028 的回复:
兄弟,我当然不会把上传的图纸放到数据库里面,我只把上传的文件名,保存路径,上传人,上传时间保存在一个表里面,上船的图纸我是放到服务器上面一个专门的文件夹里面,所以不是这个问题。至于有兄弟提到的安装sql server服务器,因为公司现在打击盗版,要安装正版的要产生费用,申请比较麻烦,不过我试一下了。一定要把我的皮带给解开了拿下美女。

既然是这样的情况,那么想问一下,你的access数据库是怎么访问的(在架构上),三层结构?网络共享?
还有就是你的所谓多用户的数量大致是多少个?10个以内,还是百个以内?还是千个以内?
还有就是 SQL Server 的确有桌面版是免费的,你可以到MS下载的,当然,免费版本的SQL Server的能力与收费的企业版对比,是有不足之处,如管理工具和数据库支持大小之类的,不过相对access来说,是比access要强的,如网络支持、查询速度、查询能力、存储过程、数据量支持大小、稳定性等等。 楼主先要弄明白瓶颈到底在什么地方才能对症下药. 
比如你说的加载窗体很慢, 其实完全可以插入计时代码看观测到底是加载到哪一块拖累了系统.

我也做过一些数据库方面的应用. 说说我的经验.
先说数据库,access本身是一款桌面型数据库, 虽说也支持多用户, 但是毕竟性能有限, 这是第一个值得怀疑的地方. 所以你可以观测一下执行一个远程查询或者数据库连接所花费的时间.

再说一下网络, 这也是一个容易出问题的地方. 本地局域网络还好一些, 一般至少是100M的. 
但是也有某些时候是外网+VPN方式访问,或者直接外网防火墙开端口访问, 这种情况下受到外网速率的限制就很大. 专线也是一样(它只是相对稳定和保密性高而已), 我就试过在2M的mpls上花10分钟连接数据库的情况.

还要结合数据集的规模. 如果表记录比较多的话, 网络开销不可忽视. (可以通过很少记录的表来对比测试)

服务器的性能有时也会制约数据库性能, 这个你可以在多用户连接的时候直接查看服务器的CPU和内存负载. 同意老蔡,先把慢的代码搞清楚是谁,用gettickcount先后对比一下执行时间,这个楼主肯定能办到.

等把慢的关键代码揪出来后再想对策不迟. Access 数据库不存在服务端,只是网络文件的读写而已,负载不会直接表现在服务端的CPU和内存上的。
根本问题是选错了数据库。
补充:VB ,  基础类
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,