打对了

实践Oracle优化技术在医疗信息化中的深入应用,探索医院信息系统性能优化设计之道。公众号:医信系统性能优化。

 

使用Excel“自动化”功能将数据输出到Excel的三种高效方法对比实验

使用“自动化”功能将数据从 ADO 记录集传输到 Excel
.NET C#版本:http://support.microsoft.com/kb/306023
.NET VB版本:http://support.microsoft.com/kb/306022
VB6版本:http://support.microsoft.com/kb/247412
以下是VB6下的测试数据,没做之前,估计ado方式最快,因为微软KB里也说CopyFromRecordset 是提高效率和性能的首选方法
http://support.microsoft.com/default.aspx?scid=kb;zh-cn;246335
做了后,发现array方式最快,可能是实验方式不同,微软那个结果是基于从一个数据库直接用ADO读数据源而得出的.
我的实验是,基于文本文件读数据,然后临时生成ADO内存记录集,转换数组,写临时TXT文件这三种方式实验的.

其中遇到不少问题:
1.ADO方式适用于Office2000及以上版本,Office 97不支持ADO,需要用DAO方式
    '  字段中的值的长度不能超过911,否则会报-2147467259错
    '   微软文章上所说是不能包括任一字段,http://support.microsoft.com/default.aspx?scid=kb;zh-cn;246335
    '   英文是说either type in a recordset,http://support.microsoft.com/default.aspx?scid=kb;en-us;246335
2.txt方式
   '   速度相对于数组略差一点,但目前来说是最佳方式,因为没有像ADO和Array两种那样都有长度不超过911限制
3.array方式
   http://support.microsoft.com/default.aspx?scid=kb;zh-cn;246335
    '1.数组不能包含超过 255 个字符的元素
    '2.数组不能包含空值
    '3.数组中的元素个数不能超过; 5461个
    '经测试,在Office2003中1-3的限制有所变化,3和2无限制了,1的限制扩大到911

ADO记录集的字段和Array数组中元素的值长度不能超过911,这个值是不是为了让人记忆深刻呢?
以下实验以打开16个从几百KB到4M不等的文本文件为数据源
三种方式反复优化过实现代码,性能不断得到提升,但不管怎样array方式都是最快的.

ado方式 txt方式 array方式
3094 2109 1062
3250 2407 1703
3687 2719 2063
6750 5343 3391
468 500 453
516 500 469
1688 1500 984
610 718 547
625 594 547
656 594 516
1765 1453 938
2578 2422 1594
546 532 468
657 578 547
4453 4140 2641
797 750 578
4453 4766 3109

posted on 2005-03-17 18:04  知道得越多知道的越少  阅读(2631)  评论(2编辑  收藏  举报

导航