14

背景:

インストールされている .NET Framework が 2.0 から 4.5 までのクライアントで実行する必要があるアプリケーションがあります。このアプリケーションは、多数のファイル (場合によっては 200k を超える個別のファイル) を列挙して操作を実行できる必要があります。

ファイルのインデックスを構築するために、アプリケーションは現在System.IO.DirectoryInfo.GetFiles()を使用しています。これは、処理コンポーネントが作業を開始する前にパス ツリー全体のインデックスが作成されるまで待機する必要があるため、パフォーマンス ヒットになります。一部の古風なテープ マルチローダーと一部の不適切に作成されたファームウェアが原因で、一部のディレクトリをトラバースすると、テープからの読み取りがトリガーされる可能性があります。処理時間が数十秒から数十分に跳ね上がります。

.NET 4.0 は、この問題を軽減するSystem.IO.Directory.EnumerateFiles(Path)メソッドを提供します。ただし、4.0+ にアップグレードされた datter コンソールはごくわずかであり、近代化を求める私たちの嘆願は敵意に満ちています。

質問:

単一のバイナリでGetFiles と EnumerateFiles の両方のメソッドを実装することは可能ですか? 事実上、これは .NET 2.0 を対象とする単一のバイナリであり、実行時に 4.0 フレームワークが使用可能であると判断された場合に .NET 4.0 メソッドを呼び出すことができます。

言及する前に: データを変更することは、クライアントにとってオプションではありません。私はもう試した。私は今まで試したことがありますか。

4

1 に答える 1

10

.NET 2.0 で動作し、.NET 4.0 メソッドを使用する単一のバイナリを (簡単に) 作成することはできません。リフレクションなど、あらゆる種類の回り道がありますが、あなたの場合、それらは悪い考えのようです。

ただし、.NET 2.0 ライブラリで EnumerateFiles の独自の実装を作成できない理由はありません。このためには、WIN32 関数FindFirstFileおよびFindNextFile. 2 つの CodeProject プロジェクトがこの領域をカバーしているように見え、ソースに適切なビットが含まれている必要があります。

于 2013-01-29T21:17:03.563 に答える