现在有近10000条数据,每条数据有2到3张图片,并且要导出到excel,图片要通过WebClient下载,导致现在导出这个excel很慢
有木有优化的思路
首先是否有能力优化打包(也就是excel的创建)过程,这一步是主要消费点。松散文件打包成一个大文件,能优化的地方不多,如优化内存拷贝,优化打包过程,优化磁盘写入。
如果是我,第一步先扔弃npoi等excel工具,打包估计就不用太折腾了,专业人员干的活,大概只会去优化打包前和打包后,打包可以尝试找专业人员搞的优化算法。
打包前,根据服务器情况调整合理线程数并发下载,尽可能占用完带宽极限,内存管够,尽可能使用内存,多使用栈,减少堆使用。
因为row数据是存储一个地方的(参看openxml),那么数据行应该一次性搞定,降低cpu消费次数以及内存来回搬运过程。
打包后,一方面是根据文件系统调整buffer参数,原则上4k倍数,大内存扔硬盘。
图片存在啥地方?
华为oos
图片导到本地机?
是的
将近10000条数据每条都下载2到3张图片并导出到Excel确实会很慢,这主要是因为网络请求和图片下载会消耗大量的时间。以下是一些优化思路:
尽量减少网络请求次数:可以将多个图片一起打包下载,或者使用图片的缩略图或预览图代替原图。
采用多线程或异步操作:可以通过多线程或异步操作并发地下载图片和导出Excel,以提高效率。
采用缓存:可以将已经下载的图片缓存到本地,下次再需要使用时直接从缓存中读取,以减少重复下载和网络请求。
调整Excel导出方式:可以尝试使用其他格式的文件替代Excel,如CSV格式等。
数据分批处理:可以将数据分成多个批次处理,每个批次只处理一部分数据,以降低单次处理的数据量。
综上所述,可以采用以上优化思路来改进图片下载和Excel导出的性能。同时,需要根据具体情况进行优化,以达到最佳的效果。
主要耗时还是在实时下载图片上。
可以单独写一个定时任务把这些图片提前离线下载到指定目录。
原来的程序稍作修改,取图片优先从本地获取,没有找到才实时去下载。
你好,可以私聊我用别的语言帮您解决
我们是c#啊
用多线程分组并发操作试试
– 码上有钱(why) 1年前