excel学习库

excel表格_excel函数公式大全_execl从入门到精通

给老项目填坑,一次.NET项目数据报表下载优化

有一天下午突然收到销售助理给反馈的问题,明明列表中有115300条数据,但是用下载按钮下载的Excel表格只有10000条数据。奇怪了,怎么会出现这种情况。

1、找根源

由于是老项目,先从前端页面找,F12浏览器查看JS源码,下载是采用js的ajax请求,点击浏览器调试模式中的网络重新运行下载,仔细检查请求的json参数,发现参数跟列表完全一致,没有问题,这是几年前的老项目了,这可怎么办,只能打开老项目来查看源码了。费劲打开项目,找到列表页面中的下载按钮,查看js中的ajax请求的文件及方法名称,找到方法后发现也没有问题,按F5进入调试模式,第一次调试结果显示参数正确,第二次调试发现有个pagesize=10000的参数,原来下载的方法跟列表的方法用的是同一个,可能是前辈为了工作效率,直接把分页的条数写成10000条,原来的数据可能不超过10000,终于找到原因了,接下来考虑怎么优化了。

2、优化

方案一,直接把pagesize的值改成100万,这种做法改起来很快,但是给后面的开发者挖了一个坑,不推荐这样做;性能测了一下,导出用了25秒。

方案二,可以把每次下载的内容用文件缓存起来,文件名可以通过下载的搜索条件MD5,如果下次下载同样搜索条件的就判断文件是否存在,这种做法的优点是下载速度快,缺点是如果数据是可变数据就会造成数据不准确,数据发生变化如何更新是个问题。

方案三,可以用分页的方法一页一页的取出数据,然后再组装成一个集合,传递给Excel组件NPOI导出。这样做的优点是按照分页导出速度快,缺点是要写分页的算法,并且不知道具体的页数。

最终选择了方案三,用while循环,不用知道具体多少数据,通过计算最后一页如果小于每页数量或者为0就停止循环。代码如下:

实验了一下,5秒导出数据,效率得到明显提升。

结语

如果你有更加优秀的方法,欢迎留言讨论。

支持小薇

腾讯云福利

爆款2核2G云服务器首年50元,2G2核5M云服务器259元/3年

链接:https://curl.qcloud.com/1VVs7OBH

关注公众号:DotNet开发跳槽

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

«    2024年12月    »
1
2345678
9101112131415
16171819202122
23242526272829
3031
控制面板
您好,欢迎到访网站!
  查看权限
网站分类
搜索
最新留言
    文章归档
      友情链接