EasyExcel处理表头的缓存设置
在学习EasyExcel
时会发现针对使用类模型配置表头相关属性时,EasyExcel
会使用到缓存技术以提升表头的解析速度如下代码:
这些参数再何时设置的哪?
在easyExcel
基础参数设置中会有这个参数filedCacheLocation
。默认采用的使用线程级别的缓存。
默认支持3种方式:
THREAD_LOCAL
:数据缓存在线程级别,当前线程使用完成时清除数据MEMORY
:数据缓存在内存级别,只有当程序停止时才会清除数据NONE
:不适应缓存
场景分析:
- 前向同一个excel和同一个sheet中重复写入数据时,并且写入属性非常多时:
如下有个用户信息:
@NoArgsConstructor
@AllArgsConstructor
@Data
public class User {@ExcelProperty("用户名")private String username;@ExcelProperty("年龄")private String age;@ExcelProperty("attribute01")private String attribute01;@ExcelProperty("attribute02")private String attribute02;@ExcelProperty("attribute03")private String attribute03;@ExcelProperty("attribute04")private String attribute04;@ExcelProperty("attribute05")private String attribute05;@ExcelProperty("attribute06")private String attribute06;@ExcelProperty("attribute07")private String attribute07;@ExcelProperty("attribute08")private String attribute08;@ExcelProperty("attribute09")private String attribute09;@ExcelProperty("attribute10")private String attribute10;@ExcelProperty("attribute11")private String attribute11;@ExcelProperty("attribute12")private String attribute12;@ExcelProperty("attribute13")private String attribute13;@ExcelProperty("attribute14")private String attribute14;@ExcelProperty("attribute15")private String attribute15;@ExcelProperty("attribute16")private String attribute16;@ExcelProperty("attribute17")private String attribute17;@ExcelProperty("attribute18")private String attribute18;@ExcelProperty("attribute19")private String attribute19;
}
主程序:
public void test01() {List<User> userList = new ArrayList<>();// 写入1000条数据for (int i = 0; i < 1000; i++) {userList.add(new User("lisi" + i, String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i),String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i),String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i),String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i), String.valueOf(i),String.valueOf(i)));}ExcelWriterBuilder excelWriterBuilder = new ExcelWriterBuilder();excelWriterBuilder.file("F:\\excel\\a.xls");excelWriterBuilder.filedCacheLocation(CacheLocationEnum.NONE);long startTime01 = System.currentTimeMillis();ExcelWriterSheetBuilder excelWriterSheetBuilder01 = new ExcelWriterSheetBuilder(excelWriterBuilder.build());excelWriterSheetBuilder01.sheetName("test01");excelWriterSheetBuilder01.doWrite(userList);long endTime01 = System.currentTimeMillis();System.out.println("总耗时 = " + (endTime01 - startTime01) + "ms");long startTime02 = System.currentTimeMillis();ExcelWriterSheetBuilder excelWriterSheetBuilder002 = new ExcelWriterSheetBuilder(excelWriterBuilder.build());excelWriterSheetBuilder002.sheetName("test02");excelWriterSheetBuilder002.doWrite(userList);long endTime02 = System.currentTimeMillis();System.out.println("总耗时 = " + (endTime02 - startTime02) + "ms");long startTime03 = System.currentTimeMillis();ExcelWriterSheetBuilder excelWriterSheetBuilder03 = new ExcelWriterSheetBuilder(excelWriterBuilder.build());excelWriterSheetBuilder03.sheetName("test03");excelWriterSheetBuilder03.doWrite(userList);long endTime03 = System.currentTimeMillis();System.out.println("总耗时 = " + (endTime03 - startTime03) + "ms");}
采用NONE
时调用3次耗时:
第一次:
总耗时 = 596ms
总耗时 = 83ms
总耗时 = 60ms
第二次:
总耗时 = 580ms
总耗时 = 100ms
总耗时 = 54ms
第三次:
总耗时 = 578ms
总耗时 = 91ms
总耗时 = 53ms
采用MEMORY
时调用3次耗时:
第一次:
总耗时 = 490ms
总耗时 = 32ms
总耗时 = 24ms
第二次:
总耗时 = 467ms
总耗时 = 35ms
总耗时 = 22ms
第三次:
总耗时 = 470ms
总耗时 = 34ms
总耗时 = 22ms
采用THREAD_LOCAL
时调用3次耗时:
第一次:
总耗时 = 468ms
总耗时 = 38ms
总耗时 = 23ms
第二次:
总耗时 = 460ms
总耗时 = 32ms
总耗时 = 22ms
第三次:
总耗时 = 460ms
总耗时 = 33ms
总耗时 = 24ms
相关文章:

EasyExcel处理表头的缓存设置
在学习EasyExcel 时会发现针对使用类模型配置表头相关属性时,EasyExcel 会使用到缓存技术以提升表头的解析速度如下代码: 这些参数再何时设置的哪? 在easyExcel 基础参数设置中会有这个参数filedCacheLocation 。默认采用的使用线程级别的…...

数据挖掘任务一般流程
数据挖掘是从大量数据中提取有价值信息的过程。它涉及多个步骤,每一步都对整个数据挖掘过程至关重要。以下是数据挖掘任务的一般流程: 业务理解: 确定业务目标。评估当前情况。定义数据挖掘问题。制定一个初步计划来达到这些目标。 数据理…...

人工智能计算机视觉:解析现状与未来趋势
导言 随着人工智能的迅速发展,计算机视觉技术逐渐成为引领创新的关键领域。本文将深入探讨人工智能在计算机视觉方面的最新进展、关键挑战以及未来可能的趋势。 1. 简介 计算机视觉是人工智能的一个重要分支,其目标是使机器具备类似于人类视觉的能力。这…...

5.1 C++11强类型枚举
一、C枚举的缺陷 1.类型冲突 枚举值和类型都是全局可见的, 与正常C的namespace、类等都是格格不入的,并且还容易导致冲突。 enum Type { General, Light, Medium, Heavy }; enum Category { General, Pistol, MachineGun, Cannon }; 如果在相同作用域…...

Android : BottomNavigation底部导航_简单应用
示例图: 1.先创建底部导航需要的图片 res → New → Vector Asset 创建三个矢量图 图片1 baseline_home.xml <vector android:height"24dp" android:tint"#000000"android:viewportHeight"24" android:viewportWidth"24…...

基于ssm培训学校教学管理平台论文
摘 要 社会的进步,教育行业发展迅速,人们对教育越来越重视,在当今网络普及的情况下,教学管理模式也开始逐渐网络化,学校开始网络教学管理模式。 本文研究的培训学校教学管理平台基于SSM框架,采用Java技术和…...

关于嵌入式开发的一些信息汇总:C标准、芯片架构、编译器、MISRA-C
关于嵌入式开发的一些信息汇总:C标准、芯片架构、编译器、MISRA-C 关于C标准芯片架构是什么?架构对芯片有什么作用?arm架构X86架构mips架构小结 编译器LLVM是什么?前端在干什么?后端在干什么? MISRA C的诞生…...

java实现局域网内视频投屏播放(二)爬虫
代码链接 视频播放原理 大多视频网站使用的是m3u8,m3u8其实不是一个真正的视频文件,而是一个视频播放列表(playlist)。它是一种文本文件,里面记录了一系列的视频片段(segment)的网络地址。这些…...
a标签的target属性
<a> 标签的 target 属性规定在何处打开链接文档。 最常用的两个值是: _self : 在当前窗口打开被链接文档 _blank:在新窗口打开被链接文档 就是常见浏览网页打开链接的方式...

无mac在线申请hbuilderx打包ios证书的方法
hbuilderx是一个跨平台的开发工具,可以开发android和ios的app应用。打包hbuilderx应用需要hbuilderx打包证书。但是很多使用hbuilderx开发的程序员,并没有mac电脑,而申请ios的证书,hbuilderx官网的教程却是需要mac电脑的ÿ…...

[css] flex wrap 九宫格布局
<div class"box"><ul class"box-inner"><li>九宫格1</li><li>九宫格2</li><li>九宫格3</li><li>九宫格4</li><li>九宫格5</li><li>九宫格6</li><li>九宫格7&l…...

云上丝绸之路| 云轴科技ZStack成功实践精选(西北)
古有“丝绸之路” 今有丝绸之路经济带 丝路焕发新生,数智助力经济 云轴科技ZStack用“云”护航千行百业 沿丝绸之路,领略西北数字化。 古丝绸之路起点-陕西 集历史与现代交融,不仅拥有悠久的历史文化积淀,而且现代化、数字化发…...
Java8 IfPresent 与 forEach 的组合操作
一、需求背景 Java8的Optional接口是我们经常使用的一个接口,尤其是对对象进行判空的时候,需要经常使用到IfPresent()。 但是,如果是对List进行判空、循环的话,就稍显繁杂了,因为几乎每次对List进行操作的时候&a…...

WebGL+Three.js入门与实战——给画布换颜色、绘制一个点、三维坐标系
个人简介 👀个人主页: 前端杂货铺 🙋♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…...
SystemServer 进程启动过程
首语 SystemServer进程主要用于启动系统服务,诸如AMS、WMS、PMS都是由它来创建的。在系统的名称为"system_server",Android核心服务都是它启动,它是非常重要。 Zygote处理SystemServer进程 在 Zygote启动过程 文章中分析我们知道…...

Java EE 多线程之 JUC
文章目录 1. Callable 接口2. ReentrantLock3. 信号量4. CountDownLatch JUC这里就是指(java.util.concurrent) concurrent 就是并发的意思 这个包里的内容,主要就是一些多线程相关的组件 1. Callable 接口 Callable 也是一种创建线程的方式…...

Unity光照模型实践
光照作为3D渲染中最重要的部分之一,如何去模拟真实环境的光照是重要的研究内容,但是现实环境光照过于复杂,有很多经典好用的光照模型去近似真实光照。 根据基础的Phong模型 最终某个点的结果为 环境光Ambient 漫反射光Diffuse 高光Specula…...

从0创建并部署一个网页到服务器
创建一个页面 1 下载node.js 下载VScode 2 在Windows下找一个路径新建一个文件夹 例如:D:\study_project\PersonalWeb 3 VSCodee中打开文件夹 4 Windows下 管理员身份打开命令提示符,执行npm install -g vue/cli 5 VSCode下打开终端,执…...
Ubuntu 22.04 安装 OCI CLI
Ubuntu 22.04 安装 OCI CLI 安装命令 安装命令 wget https://codeload.github.com/oracle/oci-cli/zip/master -O oci-cli.zip pip install oci-cli.zip完结!...
K8S的安装工具
kubectl Kubernetes 命令行工具 kubectl, 让你可以对 Kubernetes 集群运行命令。 你可以使用 kubectl 来部署应用、监测和管理集群资源以及查看日志。 有关更多信息,包括 kubectl 操作的完整列表,请参见 kubectl参考文件。 kubectl 可安装在…...
线程与协程
1. 线程与协程 1.1. “函数调用级别”的切换、上下文切换 1. 函数调用级别的切换 “函数调用级别的切换”是指:像函数调用/返回一样轻量地完成任务切换。 举例说明: 当你在程序中写一个函数调用: funcA() 然后 funcA 执行完后返回&…...

visual studio 2022更改主题为深色
visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中,选择 环境 -> 常规 ,将其中的颜色主题改成深色 点击确定,更改完成...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

JUC笔记(上)-复习 涉及死锁 volatile synchronized CAS 原子操作
一、上下文切换 即使单核CPU也可以进行多线程执行代码,CPU会给每个线程分配CPU时间片来实现这个机制。时间片非常短,所以CPU会不断地切换线程执行,从而让我们感觉多个线程是同时执行的。时间片一般是十几毫秒(ms)。通过时间片分配算法执行。…...

项目部署到Linux上时遇到的错误(Redis,MySQL,无法正确连接,地址占用问题)
Redis无法正确连接 在运行jar包时出现了这样的错误 查询得知问题核心在于Redis连接失败,具体原因是客户端发送了密码认证请求,但Redis服务器未设置密码 1.为Redis设置密码(匹配客户端配置) 步骤: 1).修…...
Device Mapper 机制
Device Mapper 机制详解 Device Mapper(简称 DM)是 Linux 内核中的一套通用块设备映射框架,为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程,并配以详细的…...

ABAP设计模式之---“简单设计原则(Simple Design)”
“Simple Design”(简单设计)是软件开发中的一个重要理念,倡导以最简单的方式实现软件功能,以确保代码清晰易懂、易维护,并在项目需求变化时能够快速适应。 其核心目标是避免复杂和过度设计,遵循“让事情保…...

Kafka入门-生产者
生产者 生产者发送流程: 延迟时间为0ms时,也就意味着每当有数据就会直接发送 异步发送API 异步发送和同步发送的不同在于:异步发送不需要等待结果,同步发送必须等待结果才能进行下一步发送。 普通异步发送 首先导入所需的k…...

R 语言科研绘图第 55 期 --- 网络图-聚类
在发表科研论文的过程中,科研绘图是必不可少的,一张好看的图形会是文章很大的加分项。 为了便于使用,本系列文章介绍的所有绘图都已收录到了 sciRplot 项目中,获取方式: R 语言科研绘图模板 --- sciRplothttps://mp.…...
ubuntu22.04 安装docker 和docker-compose
首先你要确保没有docker环境或者使用命令删掉docker sudo apt-get remove docker docker-engine docker.io containerd runc安装docker 更新软件环境 sudo apt update sudo apt upgrade下载docker依赖和GPG 密钥 # 依赖 apt-get install ca-certificates curl gnupg lsb-rel…...