头一次知道Excl在一个企业/个人的报表管理里面这么重要
以前做东西,公司要求导出成 txt 或者 csv 格式就可以了,他们说导出成Excl需要电脑安装Office,而且速度很慢,比较麻烦,不推荐。
当时由于赶进度,我信了,后来在网上搜了一下才发现,谬误源于流言。
很多人说Excl操作速度很慢,但其实只是指用官方库的一种方法,常用的Excl操作方法有三种。
这里借鉴一下
1. OleDb:
这种方式是把整个Excel文件当做一个数据源来进行数据的读取操作。
优点:实现方式简单,读取速度快;
缺点:读取Excel数据的过程不太灵活,对内存的占用比较高,当数据量变的很大时,容易由于内存空间不足导致内存溢出异常。(不过貌似对于今天电脑的硬件配置来说,内存问题不大)
2. Com组件
这种方式是通过Com组件 Microsoft.Office.Interop.Excel.dll实现Excel文件的操作。
优点:读取Excel数据非常灵活,可以实现Excel具有的各种数据处理功能;
缺点:对数据的访问时基于单元格方式实现的,所以读写数据较慢,特别是当数据量较大时,访问效率问题更为突出。另一点是要求本机安装了Microsoft Office组件。
3. NPOI
这种方式是通过NPOI库实现Excel文件操作,可以在没有安装微软Office的情况下使用。
优点:读取Excel数据速度较快,操作方式灵活;
缺点:试了再说!其中oleDb我没有用过,不评价。
大家常说的操作速度慢,指的是使用官方的 COM组件。
优点并在我看来并不是很重要,缺点很明显:慢!需要安装Office、CPU和内存占用也比较高(解析时I5CPU占用20%左右)。
我只是简单地读取20多行数据,就大概耗费了10s左右。
排除是第一次初始化耗时的原因,读取第二次耗时大约5s,也就是每秒4、5条左右
此时整个程序内存占用100M左右
当时我就傻了,这要是 10W 条数据,不就凉凉了?
赶紧。。怎么办,多线程,写算法,数据优化?
噼里啪啦写了个双线程读取,速度提了一倍,然后。。。emmm,
哈!开心,10W条数据只需要一个多小时就可以读完啦!!!
食屎咩你
此路不通,换个解决办法。
网上搜了一下,发现了NPOI这个第三方库,不需要安装Office
我先跑去NPOI官网下载了他家的压缩包v2.2.1版本,里面分 .Net 2.0和.Net 4.0 各有5个dll文件,我也没管那么多,全部引用到项目里。一顿操作后。。。看了眼结果
丢雷楼谋
速度翻了30多倍!!
还是单线程
然后我又试了下第二次读取...第三次...
果然是第三方酷
所以我就说,为什么我当初在网上找了很久都没有找到微软COM的dll
现在
老板给的任务超额完成了
把速度一天翻两倍
假装自己在忙着优化
就可以多轻松几天了
也不用写多线程了
所以我现在为什么还要找微软的dll?
呸
评论 (0)