面向单个二进制文件中的多个 .NET 框架
本文关键字:NET 框架 单个 二进制文件 | 更新日期: 2023-09-27 17:56:29
背景:
我有一个应用程序需要在已安装的 .NET 框架范围从 2.0 到 4.5 的客户端上运行。 此应用程序必须能够枚举大量文件并对其执行操作(在特定情况下,超过 200k 个离散文件)。
为了构建文件索引,应用程序当前使用 System.IO.DirectoryInfo.GetFiles()。 这会影响性能,因为处理组件必须等待整个 Path 树被索引才能开始工作。 由于一些陈旧的磁带多加载程序和一些编写不佳的固件,遍历某些目录可能会触发从磁带读取 - 将处理时间从几十秒增加到几十分钟。
.NET 4.0 提供了 System.IO.Directory.EnumerateFiles(Path) 方法,该方法缓解了此问题。 然而,只有少数datter控制台升级到4.0+,我们现代化的请求遭到了敌意。
问题:
是否可以在单个二进制文件中同时实现 GetFiles 和枚举文件的方法? 实际上,这将是面向 .NET 2.0 的单个二进制文件,如果在运行时确定 4.0 框架可用,则能够调用 .NET 4.0 方法。
在提到之前:更换灯罩不是我们的客户的选择。 我试过了。 我试过吗?
您将无法(轻松)创建适用于 .NET 2.0 并使用 .NET 4.0 方法的单个二进制文件。有各种各样的迂回方式 - 反思等,但这些在你的情况下似乎是一个坏主意。
但是,没有理由不能在 .NET 2.0 库中为 EnumerateFiles 创建自己的实现。为此,您需要对 WIN32 函数进行 P/Invoke 调用FindFirstFile
和FindNextFile
。两个 CodeProject 项目看起来涵盖了这个区域,并且应该在源代码中具有正确的位:
- http://www.codeproject.com/Articles/12782/File-System-Enumerator-using-lazy-matching
- http://www.codeproject.com/Articles/38959/A-Faster-Directory-Enumerator