当前位置: 首页 > news >正文

如何针对大Excel做文件读取?

针对大Excel文件(如超过百万行)的读取,传统的一次性加载到内存的方式会导致 内存溢出(OOM),需采用 流式读取(Streaming)分块读取(Chunk) 的策略。以下是具体方案及优化建议:


一、核心解决方案

1. 使用 Apache POI 的 SAX 模式(事件驱动)
  • 适用场景:处理 .xlsx 文件(不支持 .xls),逐行解析避免内存溢出。
  • 代码示例(Java)
    import org.apache.poi.openxml4j.opc.OPCPackage;
    import org.apache.poi.xssf.eventusermodel.XSSFReader;
    import org.apache.poi.xssf.usermodel.XSSFSheetXMLHandler;
    import org.xml.sax.InputSource;
    import org.xml.sax.XMLReader;
    import org.xml.sax.helpers.XMLReaderFactory;public class BigExcelReader {public void read(String filePath) throws Exception {try (OPCPackage pkg = OPCPackage.open(filePath)) {XSSFReader reader = new XSSFReader(pkg);XMLReader parser = XMLReaderFactory.createXMLReader();// 自定义 Sheet 处理器(需实现 XSSFSheetXMLHandler.SheetContentsHandler)SheetHandler handler = new SheetHandler();parser.setContentHandler(new XSSFSheetXMLHandler(reader.getStylesTable(), null, handler, false));InputSource sheetSource = new InputSource(reader.getSheetsData().next());parser.parse(sheetSource);}}// 自定义处理器(处理每一行数据)private static class SheetHandler implements XSSFSheetXMLHandler.SheetContentsHandler {@Overridepublic void row(int rowNum, List<Object> rowData) {// 处理行数据(rowData 是单元格值的列表)System.out.println("Row " + rowNum + ": " + rowData);}// 其他方法(如 startRow、endRow)可空实现}
    }
    
  • 优点:内存占用极低(约几十MB),适合处理超大文件。
  • 缺点:需要手动处理复杂的单元格格式和公式。

2. 使用 EasyExcel(阿里开源的流式读取库)
  • 适用场景:简化流式读取,支持 .xlsx.xls
  • 步骤
    1. 添加依赖(Maven):
      <dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version>
      </dependency>
      
    2. 定义数据模型
      @Data // Lombok 注解,生成 getter/setter
      public class UserData {@ExcelProperty("姓名") // 对应表头private String name;@ExcelProperty("年龄")private Integer age;
      }
      
    3. 流式读取
      public class ReadBigExcel {public static void main(String[] args) {String fileName = "large_file.xlsx";// 逐行读取(每读一行触发一次监听器)EasyExcel.read(fileName, UserData.class, new AnalysisEventListener<UserData>() {@Overridepublic void invoke(UserData data, AnalysisContext context) {// 处理单行数据(如存入数据库)System.out.println(data);}@Overridepublic void doAfterAllAnalysed(AnalysisContext context) {System.out.println("读取完成");}}).sheet().doRead();}
      }
      
  • 优点:API 简单,内存可控(默认每批次读取1000行),支持数据模型映射。
  • 缺点:无法直接操作单元格样式。

3. 分页读取(结合 POI 的 XSSF 和 SXSSF)
  • 适用场景:需要分批次处理数据(如导出到数据库)。
  • 示例代码
    Workbook workbook = WorkbookFactory.create(new File("large_file.xlsx"));
    Sheet sheet = workbook.getSheetAt(0);
    int pageSize = 1000; // 每页读取1000行
    int totalRows = sheet.getPhysicalNumberOfRows();for (int page = 0; page < (totalRows + pageSize - 1) / pageSize; page++) {int startRow = page * pageSize;int endRow = Math.min(startRow + pageSize, totalRows);for (int i = startRow; i < endRow; i++) {Row row = sheet.getRow(i);// 处理行数据}// 手动触发垃圾回收(可选)System.gc();
    }
    
  • 优点:代码简单直观。
  • 缺点:不适合超大文件(如百万行以上),内存仍可能溢出。

4. 转换为 CSV 处理
  • 适用场景:不需要保留 Excel 格式(如公式、样式)。
  • 步骤
    1. 使用工具(如 Apache POI)将 Excel 转换为 CSV。
    2. 用 OpenCSV 或 Commons CSV 流式读取 CSV。
  • 优点:CSV 处理速度快,内存占用低。
  • 缺点:丢失 Excel 特有功能(如多Sheet、公式)。

二、优化技巧

1. 内存优化
  • 禁用公式计算
    Workbook workbook = WorkbookFactory.create(file, null, true); // 避免缓存公式结果
    
  • 关闭缓存
    FileInputStream fis = new FileInputStream(file);
    StreamingReader reader = StreamingReader.builder().rowCacheSize(100)    // 缓存行数.bufferSize(4096)     // 缓冲区大小.open(fis);
    
2. 性能优化
  • 跳过空行和隐藏行:在处理器中判断行数据是否为空。
  • 多线程处理:将读取的数据分块后提交到线程池处理(注意线程安全)。
3. 异常处理
  • 捕获处理异常:避免因某一行数据错误导致整个任务中断。
    try {// 处理行数据
    } catch (Exception e) {e.printStackTrace(); // 记录错误日志
    }
    

三、工具推荐

工具/库适用场景特点
Apache POI需要精细控制Excel格式功能全,但内存消耗高
EasyExcel快速处理数据(无需复杂格式)内存低,API简单
OpenCSV处理纯数据(非Excel特有功能)速度极快
PandasPython环境下的数据分析适合中小型文件(需优化)

四、实战建议

  1. 预处理文件:拆分大文件为多个小文件(如按Sheet或行数拆分)。
  2. 监控内存:使用 JVisualVM 或 Arthas 监控内存使用情况。
  3. 日志记录:记录处理进度和错误行号,便于排查问题。
  4. 测试极限:在预发布环境测试文件的最大承载能力。

通过以上方法,可有效处理GB级Excel文件,避免内存溢出问题。

相关文章:

如何针对大Excel做文件读取?

针对大Excel文件&#xff08;如超过百万行&#xff09;的读取&#xff0c;传统的一次性加载到内存的方式会导致 内存溢出&#xff08;OOM&#xff09;&#xff0c;需采用 流式读取&#xff08;Streaming&#xff09; 或 分块读取&#xff08;Chunk&#xff09; 的策略。以下是具…...

数据链路层协议

目录 一、Mac地址 二、以太网&#xff08;Mac&#xff09; 三、MTU 四、ARP协议 一、Mac地址 注意&#xff1a;mac地址是全世界唯一的&#xff0c;而ip地址在不同子网中是可以重复的。 我们在之前说过&#xff0c;Mac地址如果想要进行网络通信&#xff0c;就需要让交换机记…...

【笔记】计算机网络——数据链路层

概述 链路是从一个结点到相邻结点的物理路线&#xff0c;数据链路则是在链路的基础上增加了一些必要的硬件和软件实现 数据链路层位于物理层和网络层之间&#xff0c;它的核心任务是在直接相连的节点&#xff08;如相邻的交换机&#xff0c;路由器&#xff09;之间提供可靠且…...

在制作电脑的过程中,如何区分整机性能问题和应用自身性能问题

在制作电脑的过程中&#xff0c;区分整机性能问题和应用自身性能问题非常重要。这两类问题的表现可能相似&#xff08;如卡顿、响应慢等&#xff09;&#xff0c;但原因和解决方法完全不同。以下是区分和定位问题的方法&#xff1a; 1. 整机性能问题的特征 整机性能问题通常与…...

高光谱相机在水果分类与品质检测中的应用

一、核心应用领域 ‌外部品质检测‌ ‌表面缺陷识别&#xff1a;通过400-1000nm波段的高光谱成像&#xff0c;可检测苹果表皮损伤、碰伤等细微缺陷&#xff0c;结合图像分割技术实现快速分类‌。 ‌损伤程度评估&#xff1a;例如青香蕉的碰撞损伤会导致光谱反射率变化&#…...

【零基础入门unity游戏开发 —— 通用篇】层级(Layer)、层级编号、层级二进制掩码和unity层级检测原理

考虑到每个人基础可能不一样,且并不是所有人都有同时做2D、3D开发的需求,所以我把 【零基础入门unity游戏开发】 分为成了C#篇、unity通用篇、unity3D篇、unity2D篇。 【C#篇】:主要讲解C#的基础语法,包括变量、数据类型、运算符、流程控制、面向对象等,适合没有编程基础的…...

9、STL中的multimap使用方法

一、了解 multimap是一个允许键&#xff08;key&#xff09;重复的关联容器。适合用于一对多的更新。 允许多个键拥有相同的值。基于红黑树。 multimap特性 键允许重复&#xff1a;允许多个键有相同的值。无 [ ] 运算法&#xff1a;禁止用 下标访问&#xff0c;因为键不唯一。…...

keepalived的工作原理和脑裂

一、Keepalived工作原理 keepalived是一个用于实现高可用和负载均衡的服务&#xff0c;主要基于虚拟路由协议&#xff0c;解决了nginx一台机器的单点故障问题。通过将两台nginx都配置keepalived&#xff0c;让两天nginx互为主机和备机&#xff1b;且keepalived通过 VRRP 协议和…...

k8s资源管理介绍

1.命令式管理常见的命令 资源管理方式 kubectl get nodes查看集群 kubectl get pods 查看所有pod kubectl get pod pod名 -o yaml 以yaml形式查看某个pod kubectl create namespace dev创建一个dev组 Namespace 是 Kubernetes 中用于隔离资源的一种机制。通过 Namespace&a…...

激光slam学习笔记10---ubuntu2004部署运行fastlivo2踩坑记录

背景&#xff1a;mars实验室又发福利啦&#xff01;跑跑效果&#xff0c;验了那句&#xff0c;mars出品&#xff0c;必属精品&#xff01;本人pc环境ubuntu20.04&#xff0c;基本流程按照readme走就行&#xff0c;sophus和vikit安装有些注意地方。本文做了一些部署踩坑记录&…...

Windows11 新机开荒(二)电脑优化设置

目录 前言&#xff1a; 一、注册微软账号绑定权益 二、此电脑 桌面图标 三、系统分盘及默认存储位置更改 3.1 系统分盘 3.2 默认存储位置更改 四、精简任务栏 总结&#xff1a; 前言&#xff1a; 本文承接上一篇 新机开荒&#xff08;一&#xff09; 上一篇文章地址&…...

一次模拟Windows挖矿病毒应急响应的流程及思路

什么是挖矿病毒&#xff1f; 挖矿病毒并非传统意义上专门用于破坏计算机系统的病毒&#xff0c;它本质是为了获取虚拟货币收益而非法侵占用户计算资源的恶意程序。这些虚拟货币如比特币、以太坊等&#xff0c;其获取过程依赖计算机的算力进行复杂运算&#xff0c;挖矿病毒正是…...

51单片机的寻址方式(完整)

目录 一、立即数寻址 二、直接寻址 三、寄存器寻址 四、寄存器间接寻址 五、变址寻址 六、位寻址 七、指令寻址 &#xff08;一&#xff09;绝对寻址 &#xff08;二&#xff09;相对寻址 在 51 单片机中&#xff0c;寻址方式是指在执行指令时&#xff0c;CPU 寻找操作…...

深入理解 Linux 的 top 命令:实时监控系统性能

在 Linux 系统管理和性能优化中,top 命令是一个不可或缺的工具。它可以实时显示系统的进程信息和资源使用情况,帮助管理员快速定位性能瓶颈。本文将详细介绍 top 命令的输出内容及其使用方法,帮助你更好地掌握系统性能监控。 一、top 命令简介 top 是一个动态显示系统状态的…...

Excel(函数篇):IF函数、FREQUNCY函数、截取函数、文本处理函数、日期函数、常用函数详解

目录 IF函数等于判断区间判断与AND函数、OR函数一同使用IFNA函数和IFERROR函数 FREQUNCY函数、分断统计LEFT、RIGHT、MID截取函数FIND函数、LEN函数SUBSTITUTE函数ASC函数、WIDECHAR函数实战&#xff1a;如何获取到表中所有工作簿名称文本处理函数TEXT函数TEXTJOIN函数 日期函数…...

基于 Python 爬取 TikTok 搜索数据 Tiktok爬虫(2025.3.17)

1. 前言 在数据分析和网络爬虫的应用场景中&#xff0c;我们经常需要获取社交媒体平台的数据&#xff0c;例如 TikTok。本篇文章介绍如何使用 Python 爬取 TikTok 用户搜索数据&#xff0c;并解析其返回的数据。 结果截图 2. 项目环境准备 在正式运行代码之前&#xff0c;我…...

本专栏开栏通知相关申明

通知 本专栏主要介绍本人C开发过程中遇到的各种技术栈问题&#xff0c;开此栏用于整合自己所学习到的所有知识点&#xff0c;现在无偿分享给大伙。大伙有好的建议或者问题可以在评论直接留言&#xff0c;我不一定有时间看到&#xff0c;但是看到会回复的。 技术栈1 截止到202…...

数据库设计实验(3)—— 分离与附加、还原与备份

一、目的与要求 掌握SQL Server2012拷贝物理文件的方法&#xff1b;掌握SQL Server 2012附加数据库的方法&#xff1b;掌握SQL Server 2012备份和还原的方法&#xff1b;掌握SQL Server 2012定期自动备份的方法。开始简单的SQL查询 二、实验准备 了解数据库分离和附加的意义&…...

Swift 并发中的任务让步(Yielding)和防抖(Debouncing)

网罗开发 &#xff08;小红书、快手、视频号同名&#xff09; 大家好&#xff0c;我是 展菲&#xff0c;目前在上市企业从事人工智能项目研发管理工作&#xff0c;平时热衷于分享各种编程领域的软硬技能知识以及前沿技术&#xff0c;包括iOS、前端、Harmony OS、Java、Python等…...

hibernate 自动生成数据库表和java类 字段顺序不一致 这导致添加数据库数据时 异常

hibernate 自动生成的数据库表和java类 字段顺序不一致 这导致该书写方式添加数据库数据时 异常 User user new User( null, username, email, phone, passwordEncoder.encode(password) ); return userRepository.save(user);Hibernate 默认不会保证数据库表字段的顺序与 Ja…...

05 MP4解码AAC + 格式知识

AAC⾳频格式ADIF这种格式的特征是可以确定的找到这个⾳频数据的开始,不需进⾏在⾳频数据流中间开始的解码,即它的解码必须在明确定义的开始处进⾏。故这种格式常⽤在磁盘⽂件中 ADTS是AAC⾳频的传输流格式。AAC⾳频格式在MPEG-2(ISO-13318-7 2003)中有定义。AAC后来⼜被采⽤…...

docker和k8s区别详解

一、核心定位对比 维度DockerKubernetes (K8s)引用来源核心功能容器引擎&#xff08;构建、运行、分发容器&#xff09;容器集群管理系统&#xff08;编排、调度、扩展&#xff09;[1][2][5]抽象层级单机容器化技术跨主机集群管理平台[5][6]技术目标解决应用环境一致性解决大规…...

生信分析服务作图TCGA/GEO数据库挖掘细胞测序转录学代做指导辅导

生信分析服务作图、TCGA/GEO数据库挖掘、细胞测序转录学代做指导辅导等相关内容&#xff0c;是当前生命科学研究中不可或缺的一部分。以下是对这些服务的详细解析&#xff1a; 一、生信分析服务作图 生信分析服务作图是生信分析中的重要环节&#xff0c;它通过将复杂的生物信…...

修改HuggingFace模型默认缓存路径

huggingface模型的默认缓存路径是~/.cache/huggingface/hub/ 通常修改为自己的路径会更为方便。 方式一&#xff1a;cache_dir 参数 可以通过from_pretrained函数中的 cache_dir 参数来指定&#xff0c;缺点&#xff0c;每次都需要手动指定&#xff0c;比较麻烦。 如&#x…...

游戏引擎学习第167天

回顾和今天的计划 我们不使用引擎&#xff0c;也不依赖库&#xff0c;只有我们自己和我们的小手指在敲击代码。 今天我们会继续进行一些工作。首先&#xff0c;我们会清理昨天留下的一些问题&#xff0c;这些问题我们当时没有深入探讨。除了这些&#xff0c;我觉得我们在资产…...

阿里云服务器环境部署 三 Minio文件服务集群的搭建

Minio文件服务集群的搭建 一 准备工作 1、三台机器 配置 vim /etc/hosts 172.16.108.44 minio4 172.16.108.43 minio3 172.16.108.42 minio2 [rootbigdata41 es]# docker --version Docker version 26.1.4, build 5650f9b [rootbigdata43 minio]# docker-compose -v -bash…...

让人感到疑惑的const

const 关键字在不同的编程语言中有着不同的含义和限制&#xff0c;但通常它被用来声明一个常量或只读变量。然而&#xff0c;在 JavaScript 中&#xff0c;const 的行为有时可能会让人感到困惑&#xff0c;因为它并不总是意味着“不可变”&#xff08;immutable&#xff09;。让…...

网易云信架构升级实践,故障恢复时间缩至8秒

一、项目背景 网易云信是网易旗下集IM与音视频技术于一体的PaaS服务平台&#xff0c;为全球提供融合通信与视频的核心功能和组件&#xff0c;包括IM即时通讯、短信、信令等通信服务&#xff0c;以及RTC、直播、点播、互动直播、互动白板等音视频服务&#xff0c;此外&#xf…...

算法刷题记录——LeetCode篇(3) [第201~300题](持续更新)

(优先整理热门100及面试150&#xff0c;不定期持续更新&#xff0c;欢迎关注) 207. 课程表 你这个学期必须选修 numCourses 门课程&#xff0c;记为 0 到 numCourses - 1 。 在选修某些课程之前需要一些先修课程。 先修课程按数组 prerequisites 给出&#xff0c;其中 prerequ…...

navicat导出文件密码解密

文章目录 一、概念二、导出文件1、创建的数据库连接信息2、导出带密码的连接信息3、查看导出后的文件 三、Python代码解析四、参考地址 一、概念 Navicat中导出的带密码的文件后缀是.ncx结尾的&#xff0c;里面是xml格式的文件&#xff0c;存储了数据库的连接&#xff0c;方便…...

uniapp vue3项目定义全局变量,切换底部babar时根据条件刷新页面

前言 uniapp项目中&#xff0c;每个tabbar页面来回点时候&#xff0c;不会触发页面更新。但是有时页面上有数据发生改变需要更新模版时&#xff0c;就得能及时的通知到页面。如果在onshow生命周期里每次都调用异步请求更新数据&#xff0c;有些不合理&#xff0c;况且页面有时…...

Linux上的`i2c-tools`工具集的详细介绍;并利用它操作IMX6ULL的I2C控制器进而控制芯片AP3216C读取光照值和距离值

IC-Tools 工具集介绍 i2c-tools 是 Linux 下用于 IC 设备调试 的用户空间工具集(你也可以把它看成是一个库&#xff0c;类似于之前自己用过的触摸屏库tslib库、FreeType矢量字符库)&#xff0c;它提供了一系列命令行工具&#xff0c;可以扫描、读取、写入 IC 设备&#xff0c;…...

## DeepSeek写射击手机小游戏

DeepSeek写射击手机小游戏 提问 根据提的要求&#xff0c;让DeepSeek整理的需求&#xff0c;进行提问&#xff0c;内容如下&#xff1a; 请生成一个包含以下功能的可运行移动端射击小游戏H5文件&#xff1a; 要求 可以重新开始游戏 可以暂停游戏 射击位置在底部中间&#xff…...

奇安信全流量(天眼)面试题

一、全流量设备&#xff08;天眼&#xff09;的部署架构 天眼系统采用旁路部署模式&#xff0c;通过流量镜像实现非侵入式监测&#xff0c;核心组件包括流量传感器、分析平台和文件威胁鉴定器&#xff0c;具体部署架构如下&#xff1a; 传感器部署 关键节点覆盖&#xff1a;在…...

计算机四级 - 数据库原理(操作系统部分)- 第2章「操作系统运行机制」

系统调用是应用程序请求操作系统核心完成某一特定功能的一种过程调用&#xff0c;与一般调用的最大区别就是调用程序运行在用户态&#xff0c;而被调用程序则运行在系统态寄存器类型&#xff1a; 用户不可见寄存器&#xff1a;程序计数器、指令寄存器、程序状态字&#xff08;P…...

【css酷炫效果】纯CSS实现虫洞穿越效果

【css酷炫效果】纯CSS实现穿越效果 缘创作背景html结构css样式完整代码基础版进阶版&#xff08;虫洞穿越&#xff09; 效果图 想直接拿走的老板&#xff0c;链接放在这里&#xff1a;https://download.csdn.net/download/u011561335/90491973 缘 创作随缘&#xff0c;不定时…...

火山引擎(豆包大模型)(抖音平台)之火山方舟的Prompt的使用测试

前言 在大模型的使用过程当中&#xff0c;Prompt的使用非常的关键。原来&#xff0c;我对Prompt的理解不深&#xff0c;觉得Prompt的产生并不是很有必要。但是&#xff0c;自从使用了火山方舟中的“Prompt优解”之后&#xff0c;感受加深了&#xff0c;觉得Prompt是我们和大模型…...

多线程(四)----线程安全

线程安全问题的万恶之源就是多线程的抢占式执行所带来的随机性. 有了多线程, 此时抢占式执行下, 代码执行的顺序, 会出现更多的变数, 代码执行顺序的可能性就从一种情况变成了无数种情况. 只要有一种情况使得代码结果不正确, 都是视为bug, 线程不安全. 有线程安全的代码 以下…...

跨系统投屏:Realme手机(远程)投屏到Linux系统的简单方法

家里长辈年纪上来了&#xff0c;有点老花眼&#xff0c;平常看手机总是觉得字体不够大&#xff0c;还一个劲儿地将手机拿很远。其实那台手机的字体已经调到最大了。 为了让长辈刷手机的时候可以轻松快乐一点&#xff0c;我们帮他将手机投屏到电脑上。毕竟电脑屏幕比手机大多了&…...

【eNSP基础使用教程-1】

座右铭: 纵有疾风起&#xff0c;人生不言弃。 文章目录 前言一、更改设备名称指令1、双击路由器进入2、 进入系统视图3、更改设备名称为R14、使用同样的办法修改路由器R2、R3 二、配置路由物理接口的IP 地址1、查看R1路由器当前接口IP 地址配置与路由表2、查看路由器上的路由表…...

android开发:组件事件汇总

在 Android 开发中&#xff0c;Java 文件中有许多组件事件可以处理用户交互。以下是一些常见的组件事件及其用途和示例&#xff1a; 1. 点击事件 (Click) 用于处理用户点击控件的操作。 示例代码&#xff1a; Button button findViewById(R.id.button); button.setOnClickL…...

C++|向函数传递对象

在 C 里&#xff0c;对象作为函数的参数和返回值&#xff0c;有值传递、指针传递和引用传递这三种传递方式&#xff0c;下面为你详细介绍。 1.值传递 在值传递时&#xff0c;把实参对象的值复制给形参对象&#xff0c;函数会接收实参的一个副本&#xff0c;而非实参本身。函数…...

网络爬虫【爬虫库urllib】

我叫不三不四&#xff0c;很高兴见到大家&#xff0c;欢迎一起学习交流和进步 今天来讲一讲爬虫 urllib介绍 Urllib是Python自带的标准库&#xff0c;无须安装&#xff0c;直接引用即可。 Urllib是一个收集几个模块来使用URL的软件包&#xff0c;大致具备以下功能。 ● urlli…...

【一起来学kubernetes】17、Configmap使用详解

前言概述核心特性创建 ConfigMap使用 ConfigMap1. **环境变量**2. **Volume 挂载**3. **命令行参数** 更新与热重载Docker容器中Java服务使用Configmap**一、通过环境变量注入****步骤说明****示例配置** **二、通过 Volume 挂载配置文件****步骤说明****示例配置** **三、动态…...

QT程序双击可执行文件运行方法

1、qt编译选择release模式 在pro文件添加&#xff1a;QMAKE_LFLAGS -no-pie 2、cmake编译qt界面程序 在CMakeLists.txt文件中添加&#xff1a; set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -no-pie") set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -no-pie")注意 …...

【css酷炫效果】实现鱼群游动动态效果

【css酷炫效果】实现小鱼游动动态效果 缘创作背景css代码创建div容器引入jquery引入鱼群js完整代码效果图成品资源下载链接:点击下载 缘 在开发系统功能的时候,无意间看到了小鱼游动特效,感觉很有意思,就在网上找了相关教程,分享给大家。 创作背景 刚看到csdn出活动了…...

【GNN】GAT

消息传递 层数越多&#xff0c;聚合更多的消息...

Prims region.Views 为null

原因&#xff1a; 导航未完成或异步问题 解决方式&#xff1a;使用回调确认导航完成后再操作视图 _regionManager.RequestNavigate("MonitorRegion", "MonitorView", nps, navigationResult > {if (navigationResult.Result true){var region _regio…...

在windows10系统上安装docker,然后在容器中运行GPU版本的Pytorch,并使用vscode连接该容器

一 . 安装Docker Desktop 首先打开网址https://docs.docker.com/desktop/install/windows-install/ 下载完后&#xff0c;双击下面的exe文件进行安装&#xff0c;默认情况下&#xff0c;Docker Desktop 安装在C:\Program Files\Docker\Docker 出现提示时&#xff0c;请确保…...

WPS 搭配 Zotero 插件使用

安装Zotero后&#xff0c;Word自动引入了插件&#xff0c;但WPS却没有&#xff0c;做为WPS的重度用户&#xff0c;这是不行的。 解决方案&#xff1a; 1.找到 Zotero.dotm 一般在安装目录下&#xff0c; 2.然后复制到WPS的startup下 我的目录是&#xff1a;C:\Users\lianq…...