记录C#导出数据慢的优化方法
Winform程序将数据库中的历史数据导出到Excel中速度慢,导出1000多条数据优化前需要40秒,优化后只需要2秒,4万条数据只需要10秒。
优化前:
for (int i = 0; i < myDGV.Columns.Count; i++)
{worksheet.Cells[1, i + 1] = myDGV.Columns[i].ColumnName;
}
//写入数值
for (int r = 0; r < myDGV.Rows.Count; r++)
{for (int i = 0; i < myDGV.Columns.Count; i++){worksheet.Cells[r + 2, i + 1] = myDGV.Rows[r][i].ToString();}System.Windows.Forms.Application.DoEvents();
}
优化后:
int rowCount = myDGV.Rows.Count;
int columnsCount = myDGV.Columns.Count;
string lastRange = ConvertToTitle(columnsCount) + (rowCount + 1);
object[,] datas = worksheet.Range["A1", lastRange].Value2;
for (int i = 0; i < columnsCount; i++)
{datas[1, i + 1] = myDGV.Columns[i].ColumnName;
}
//写入数值
for (int r = 0; r < rowCount; r++)
{for (int i = 0; i < columnsCount; i++){datas[r + 2, i + 1] = myDGV.Rows[r][i].ToString();}System.Windows.Forms.Application.DoEvents();
}
worksheet.Range["A1", lastRange].Value2 = datas;
优化思路:
优化前是在for循环中,不断的操作真实的worksheet表格文件,向其中添加数据,这一步操作存在耗时,再根据数据量大小循环几千几万次后累计耗时就很大了;优化后是先创建一个表格数据对象,向数据对象中循环添加数据,数据全部添加完后,再向真实的worksheet中一次性写入数据后保存。
相关文章:
记录C#导出数据慢的优化方法
Winform程序将数据库中的历史数据导出到Excel中速度慢,导出1000多条数据优化前需要40秒,优化后只需要2秒,4万条数据只需要10秒。 优化前: for (int i 0; i < myDGV.Columns.Count; i) {worksheet.Cells[1, i 1] myDGV.Col…...
Android批量加载图片OOM问题
Android批量加载图片OOM问题 前言使用内存缓存使用磁盘缓存处理配置更改 前言 将单个位图加载到界面中非常简单,但如果您需要同时加载较大的一组图片,则操作起来会比较复杂。实际上,在许多情况下(比如使用 ListView、GridView 或…...
SNAT与DNAT公私网地址转换
前言 SNAT和DNAT是两种重要的网络地址转换技术,它们允许内部网络中的多个主机共享单个公共IP地址,或者将公共IP地址映射到内部网络中的特定主机。这些技术在构建企业级网络和互联网应用程序时非常重要,因为它们可以帮助保护内部网络安全&…...
快速上手Spring Boot整合,开发出优雅可靠的Web应用!
SpringBoot 1,SpringBoot简介1.1 SpringBoot快速入门1.1.1 开发步骤1.1.1.1 创建新模块1.1.1.2 创建 Controller1.1.1.3 启动服务器1.1.1.4 进行测试 1.1.2 对比1.1.3 官网构建工程1.1.3.1 进入SpringBoot官网1.1.3.2 选择依赖1.1.3.3 生成工程 1.1.4 SpringBoot工程…...
MySQL高级特性篇(7)-数据库版本控制与迁移
MySQL数据库版本控制与迁移 在软件开发的过程中,数据库版本控制和迁移是非常重要的一部分。这些过程确保了数据库的结构及数据的追踪和更新。在本篇博客中,我们将介绍如何使用Markdown语法来编写MySQL数据库版本控制与迁移的相关内容。 1. 什么是MySQL…...
js判断对象是否为空
给定一个对象或数组,判断它是否为空。 一个空对象不包含任何键值对。 一个空数组不包含任何元素。 输入:obj {"a": 1, "b": 2} 输出:false 解释:这个对象有两个键值对,所以它不为空。var isObje…...
2024前端面试准备之HTML篇
全文链接 1. doctype的作用是什么 DOCTYPE是html5标准网页声明,且必须声明在HTML⽂档的第⼀⾏。来告知浏览器的解析器⽤什么⽂档标准解析这个⽂档,不同的渲染模式会影响到浏览器对于 CSS 代码甚⾄ JavaScript 脚本的解析 ⽂档解析类型有: BackCompat:怪异模式,浏览器使…...
devOps系列(八)efk+prometheus+grafana日志监控和告警
前言 作者目前打算分享一期关于devOps系列的文章,希望对热爱学习和探索的你有所帮助。 文章主要记录一些简洁、高效的运维部署指令,旨在 记录和能够快速地构建系统。就像运维文档或者手册一样,方便进行系统的重建、改造和优化。每篇文章独立…...
考研英语单词29
Day 29 unify v.统一,使成一体【union n.结合,联合,工会,团结 unity n.团结,统一,协调】 offend v.冒犯,使不愉快【offender n.冒犯者 offensive a.冒犯的,无礼的】 d…...
spring-security 过滤器
spring-security过滤器 版本信息过滤器配置过滤器配置相关类图过滤器加载过程创建 HttpSecurity Bean 对象创建过滤器 过滤器作用ExceptionTranslationFilter 自定义过滤器 本章介绍 spring-security 过滤器配置类 HttpSecurity,过滤器加载过程,自定义过…...
掌握这7种软件设计原则,让你的代码更优雅
掌握这7种软件设计原则,让你的代码更优雅 在软件开发过程中,设计原则是非常重要的指导方针,它们可以帮助我们创建出更加清晰、可维护和可扩展的软件系统。本文将介绍7种常见的软件设计原则,并解释它们如何提升代码质量。 1. 单…...
Flutter自定义tabbar任意样式
场景描述 最近在使用遇到几组需要自定义的tabbar或者类似组件,在百度查询资料中通常,需要自定义 TabIndicator extends Decoration 比如上图中的带圆角的指示器这样实现 就很麻烦, 搜出来的相关也是在此之处上自己画,主要再遇…...
Java设计模式【策略模式】
一、前言 1.1 背景 针对某种业务可能存在多种实现方式,传统方式是通过传统if…else…或者switch代码判断; 弊端: 代码可读性差扩展性差难以维护 1.2 简介 策略模式是一种行为型模式,它将对象和行为分开,将行为定…...
(13)Hive调优——动态分区导致的小文件问题
前言 动态分区指的是:分区的字段值是基于查询结果自动推断出来的,核心语法就是insertselect。 具体内容指路文章: https://blog.csdn.net/SHWAITME/article/details/136111924?spm1001.2014.3001.5501文章浏览阅读483次,点赞15次…...
【linux】使用g++调试内存泄露:AddressSanitizer
1、简介 AddressSanitizer(又名 ASan)是 C/C++ 的内存错误检测器。它可以用来检测: 释放后使用(悬空指针) 堆缓冲区溢出 堆栈缓冲区溢出 全局缓冲区溢出 在作用域之后使用 初始化顺序错误 内存泄漏这个工具非常快,只将被检测的程序速度减慢约2倍,而Valgrind将会是程序…...
第三百五十七回
文章目录 1. 概念介绍2. 使用方法2.1 List2.2 Map2.3 Set 3. 示例代码4. 内容总结 我们在上一章回中介绍了"convert包"相关的内容,本章回中将介绍collection.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中介绍的内容是col…...
新版Java面试专题视频教程——框架篇
新版Java面试专题视频教程——框架篇 框架篇 01-框架篇介绍02-Spring-单例bean是线程安全的吗03-Spring-AOP相关面试题04-Spring-事务失效的场景05-Spring-bean的生命周期5.1 BeanDefinition 06-Spring-bean的循环依赖(循环引用)6.1 一般对象的循环依…...
网络爬虫实战 | 上传以及下载处理后的文件
详细代码在文尾 以实现爬虫一个简单的(SimFIR (doctrp.top))网址为例,需要遵循几个步骤: 1. 分析网页结构 首先,需要分析该网页的结构,了解图片是如何存储和组织的。这通常涉及查看网页的HTML源代码,可能还包括CSS和JavaScript文件。检查图片URL的模式,看看是否有规律…...
Linux--shell编程中有关while循环的详细内容
文章关于while循环的内容目录 一、while循环 二、无限循环 三、case语句 四、跳出循环 五、break 六、continue 一、w…...
回归测试与重新测试
软件开发是一个充满挑战的旅程,在这条道路上始终伴随着错误和不确定性的挑战。然而,真正将卓越软件与其他软件区分开来的是管理和解决这些挑战的效率,这就是结构良好的测试计划变得至关重要的地方,该计划的核心在于两个基本实践&a…...
实战起步:用快马生成数据分析项目的python环境与示例代码脚手架
今天想和大家分享一个数据分析项目的快速启动方案。作为一个经常需要处理各种数据的人,我发现每次开始新项目时,重复搭建环境和初始化项目结构特别浪费时间。后来发现了InsCode(快马)平台,它帮我解决了这个问题。 项目初始化脚本 这个脚本会自…...
【计算机组成原理】——磁盘性能三要素:容量、寻址与传输的实战解析
1. 磁盘性能三要素:从理论到实战 刚接触计算机组成原理时,我对磁盘性能的理解仅限于"越大越好"。直到有次帮朋友选配NAS存储,面对商家宣传的"7200转高速盘"、"128MB缓存"等参数时,才发现自己完全不…...
GBase 8c 表空间规划和对象迁移
GBase 8c 表空间规划和对象迁移 我最近看 GBase 8c 资料时,越来越强烈的一个感觉是:很多现场不是不会建表空间,而是把表空间用得太晚、太散、太随意。 真正落到现场时,最常见的现象通常不是“不会执行 CREATE TABLESPACE”&#x…...
终极Koikatu HF Patch配置指南:游戏体验全面升级方案
终极Koikatu HF Patch配置指南:游戏体验全面升级方案 【免费下载链接】KK-HF_Patch Automatically translate, uncensor and update Koikatu! and Koikatsu Party! 项目地址: https://gitcode.com/gh_mirrors/kk/KK-HF_Patch Koikatu HF Patch作为非官方增强…...
LoadRunner Developer实战:如何在VSCode中集成性能测试(含Jenkins流水线配置)
LoadRunner Developer实战:VSCode集成与Jenkins流水线配置全指南 在DevOps实践中,性能测试左移已成为提升软件质量的关键策略。作为Micro Focus推出的开发者友好型工具,LoadRunner Developer让开发团队能在编码阶段就发现性能瓶颈。本文将手…...
FFTW3内存管理最佳实践:fftw_malloc与数据对齐技巧
FFTW3内存管理最佳实践:fftw_malloc与数据对齐技巧 【免费下载链接】fftw3 DO NOT CHECK OUT THESE FILES FROM GITHUB UNLESS YOU KNOW WHAT YOU ARE DOING. (See below.) 项目地址: https://gitcode.com/gh_mirrors/ff/fftw3 FFTW3(Fastest Fou…...
Paperless-ng多语言文档管理终极指南:如何实现国际化支持的完整解决方案
Paperless-ng多语言文档管理终极指南:如何实现国际化支持的完整解决方案 【免费下载链接】paperless-ng A supercharged version of paperless: scan, index and archive all your physical documents 项目地址: https://gitcode.com/gh_mirrors/pa/paperless-ng …...
113. 强制使用 Letsencrypt ECDSA 和 DNS-01 续期挑战的默认 HTTPS Rancher 证书
Environment 环境 2.9 Situation 地理位置A self-signed default Rancher certificate is currently used and will be migrated to a stronger Let’s Encrypt ECDSA-386 certificate using the DNS-01 renewal challenge. 目前使用自签名默认的牧场证书,并将通过…...
QML与QWidget混合开发:实现高效UI集成的实战指南
1. 为什么需要QML与QWidget混合开发 在Qt开发中,QML和QWidget是两种完全不同的UI构建方式。QML凭借其声明式语法和强大的动画效果,在现代UI开发中越来越受欢迎。但现实情况是,很多成熟的功能模块都是基于QWidget开发的,比如一些第…...
从‘古董’协议到云存储桥梁:聊聊FTP在现代开发中的那些‘真香’应用场景
从‘古董’协议到云存储桥梁:聊聊FTP在现代开发中的那些‘真香’应用场景 当谈到文件传输协议时,很多人第一反应可能是"这不是上个世纪的技术吗?"。确实,FTP(File Transfer Protocol)诞生于1971年,比大多数程…...
