c# - 需要有效扫描大型 excel 文件上的低端 ascii 控制字符
问题描述
我正在研究 ETL 验证程序,以在处理之前扫描无效的 ascii 字符。在这种情况下,无效被定义为 0-31 范围内的 ascii 字符。
在 C# ETL 验证服务中,我使用 OfficeOpenXml 来检查 excel 文件的内容。
除了循环每个工作表、每一列和每一行之外,有谁知道搜索内容的更有效方法?文件可能非常大,验证应该尽可能快。
是否可以访问原始 xml 缓冲区?解压缩 xml 文件并扫描那里的内容会更快吗?
解决方案
首先,我认为是时候进行速度咆哮了: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 循环隐式创建的枚举器)。
推荐阅读
- mysql - 我可以创建一个过程或函数来删除 mysql 中的参数表吗?
- html - 如何在带有控制器和视图的 codeigniter4 中应用表单验证?
- css - 仅在触发元素下方定位 Mat-Select 选项
- visual-studio - 如何将 Visual Studio 2019 中的调试输出重定向到文件?
- php - WordPress 检查查询是否针对 pre_get_posts 过滤器中的自定义类型
- azure - 从 Azure Active Directory 中的多个租户获取用户详细信息
- mysql - MySQL JSON_EXTRACT() 查询返回 null
- c# - 将帖子发送到 Facebook 页面
- rotation - 如何在 OpenLayers 6 上添加旋转和缩放监听器?
- python - Python 中 Newton-Raphson 中的 TypeError