首页 > 解决方案 > 需要有效扫描大型 excel 文件上的低端 ascii 控制字符

问题描述

我正在研究 ETL 验证程序,以在处理之前扫描无效的 ascii 字符。在这种情况下,无效被定义为 0-31 范围内的 ascii 字符。

在 C# ETL 验证服务中,我使用 OfficeOpenXml 来检查 excel 文件的内容。

除了循环每个工作表、每一列和每一行之外,有谁知道搜索内容的更有效方法?文件可能非常大,验证应该尽可能快。

是否可以访问原始 xml 缓冲区?解压缩 xml 文件并扫描那里的内容会更快吗?

标签: c#excelopenxml

解决方案


首先,我认为是时候进行速度咆哮了:https ://ericlippert.com/2012/12/17/performance-rant/

问题是,现在的瓶颈在哪里。我的直觉告诉我它应该是磁盘。您正在处理文件,因此它通常是磁盘。如果是这样的话,除了将每个单元格加载到内存中一次之外,没有太多可以加快的速度。

但是,您正在对字符串进行非常深入的处理,因为您必须遍历每个字符。因此,可能会花费大量的时间。很可能不是瓶颈,而是您可以否定成本的东西。

您可能可以进行一些异步操作,在处理此单元格/行时在后台加载下一个单元格/行。像Directory.EnumerateFiles()vs这样的方法Directory.GetFiles可能有效:https ://docs.microsoft.com/en-us/dotnet/api/system.io.directory.enumeratefiles

Row 似乎确实有一个GetEnumerator函数。但它可能只是为需要枚举器的代码获取枚举器,而实际上并不包括延迟/后台加载(即像为 foreach 循环隐式创建的枚举器)。


推荐阅读