質問

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

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

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

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

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

役に立ちましたか?

解決

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

ResXResourceReader reader = new ResXResourceReader(myfile);
IEnumerable<DictionaryEntry> enumerator = reader.OfType<DictionaryEntry>();

他のヒント

前処理を行うことを検討したことがありますか?

Resxファイルをロードし、キーと値のペアをループして、それらをハッシュテーブルに反転格納することができます(つまり、ハッシュテーブルのキーは実際にはリソースの値です、ハッシュテーブルの値はリソースのキーです)。次に、value-<!> gt; keyの翻訳が高速になります。唯一の懸念は、重複(同じ値を持つ複数のリソース)の処理方法です。

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

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

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top