【发布时间】:2013-01-29 21:04:38
【问题描述】:
背景:
我有一个应用程序需要在其安装的 .NET 框架范围从 2.0 到 4.5 的客户端上运行。此应用程序必须能够对大量文件(在特定情况下超过 200k 个离散文件)进行枚举和操作。
为了建立文件索引,应用程序当前使用System.IO.DirectoryInfo.GetFiles()。这会影响性能,因为处理组件必须等待整个路径树被索引才能开始工作。由于一些过时的磁带多加载器和一些编写不佳的固件,遍历某些目录可能会触发从磁带读取 - 将处理时间从几十秒缩短到几十分钟。
.NET 4.0 提供了System.IO.Directory.EnumerateFiles(Path) 方法,可以缓解这个问题。然而,只有少数 Datter 游戏机升级到 4.0+,我们要求进行现代化改造的请求遭到了敌意。
问题:
是否可以在单个二进制文件中同时实现 GetFiles 和 EnumerateFiles 的方法?实际上,这将是针对 .NET 2.0 的单个二进制文件,如果在运行时确定 4.0 框架可用,则能够调用 .NET 4.0 方法。
在提到之前:更换 datters 不是我们客户的选择。我试过了。我有没有试过。
【问题讨论】:
-
如果他们拒绝升级,那么您真的无法解决这个问题。要回答您的问题,这是不可能的。
-
我认为你可以在 .Net 2 中编写自己的 EnumerateFiles() 实现。
-
您可能能够做的是将不同的代码放在不同的子程序集中,然后在确定安装的 .NET 运行时版本后决定调用哪个。尽管这可能要求主程序是针对最新版本构建的——因此您处于完全相同的位置。
-
如果这对您来说可能,这个问题可能会有所帮助。 stackoverflow.com/questions/2382927/… 据我所知,不可能同时定位两个框架或有条件地定位。
-
您可以在安装时通过安装程序中的一些自定义操作进行区分
标签: c# .net multitargeting