1

.resx実行時に特定のファイル内の特定のテキストのキーを取得する方法を構築しようとしています。

現在、ファイルを開いて読み取ることができますResXResourceReaderが ( を使用)、foreachファイル全体を調べるには a を使用する必要があります。

.resx一部のファイルはかなり大きく (2000 文字列程度)、これを頻繁に行う可能性があるため、これはパフォーマンスの問題である可能性があります。

メソッドが比較的最適化されていると想定しているため、LINQ to Objects を使用してこれをクエリしたいと思いますが、whereそうすることができませんでした。ResXResourceReaderクラスには と の 2 つのメソッドがAsQueryable()ありますGetEnumerator()が、どちらもその結果に対する LINQ を許可しません (from n in reader.AsQueryable() where失敗します)。

によって提供されるものに対して LINQ を実行するにはどうすればよいResXResourceReaderですか、それとも時間の価値があるでしょうか?

4

3 に答える 3

3

次のコードは、LINQ を使用してリソース ファイルの内容をクエリできるようにする IEnumerable オブジェクトを返します。

ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();
于 2009-05-05T19:08:49.210 に答える
1

前処理をすることだけを考えましたか?

Resx ファイルをロードし、キーと値のペアをループして、ハッシュ テーブルに逆順に格納することができます (つまり、ハッシュ テーブルのキーは実際にはリソースの値であり、ハッシュ テーブルの値はリソースのキー)。その場合、value->key の変換は高速になります。唯一の懸念は、重複 (同じ値を持つ複数のリソース) の処理方法です。

于 2009-05-05T18:44:43.230 に答える
1

これはあなたの時間の価値がありません。LINQ には、.resx ファイルを効率的に検索する手段がありません。Dictionary<TKey,TValue>メモリの使用量と、データをキャッシュすることが理にかなっているかどうかに応じて、ファイル全体を に読み込んでその方法でルックアップを行う方がよいでしょう。

もちろん、独自の連符オブジェクトを作成してキーと値のペアを格納し、ファイル全体をこれらのリストに読み込み、LINQ to オブジェクトでクエリを実行できるようにすることもできますが、これは a ほど高速ではありません。Dictionaryより多くのオーバーヘッドが必要になります。

于 2009-05-05T18:49:43.547 に答える