1

Asp.Net MVC Web アプリケーションがあり、xml 構成ファイルには約 40 の値が含まれています。

私の Web アプリは 1 つのページにすぎませんが、いくつかの部分ビュー (それぞれに独自のモデルとコントローラーがあります) に分割されています。各セクションでは、構成ファイルの値のすべてではなく一部を使用する必要がありますが、一部重複があります。たとえば、ViewA には が必要valueXで、ViewB にはvalueXとが必要valueYです。

私の質問はこれです - メインの HomeController で一度 .xml ファイルを読み込んで、他のすべてのビュー/コントローラーに値を渡す方が良いですか? どうすればいいのかわかりません。各セクションには独自のモデルがあるため、これらの値をモデルに入れることは実際にはできません。また、ViewBag を使用して 40 個の値を格納したいとは思いません。

それとも、各コントローラーが独自に xml ファイルを読み取り、必要なデータのみを取得する方がよいでしょうか? これにより、1 つの画面をロードするためだけに同じ xml ファイルが最大 5 回読み取られ、その後は部分ビューが更新されるたびに読み取られます。

これらのオプションのいずれかまたはこれらのオプションは、パフォーマンスまたはメモリに影響を与えますか?

4

2 に答える 2

3

これらのオプションのいずれかまたはこれらのオプションは、パフォーマンスまたはメモリに影響を与えますか?

はい。ファイルを複数回読み取ると、一度読み取るよりもはるかに遅くなります。また、値を保持すると、値を保持しない場合よりも多くのメモリが消費されます。

しかし、多くの時間や多くのメモリについて話しているわけではありません。40 個の値だけではありません。これらの値がそれぞれメガバイトでない限り。

XML データをロードしてキャッシュする方法は多数あります。これは、アプリケーションに初めてアクセスするときに 1 回ロードできます。または、リクエストごとにロードすることもできます。私のアプリケーションでは、アプリケーションが初めてアクセスされたときにデータをロードします。基本的に名前/値のコレクションであるオブジェクトにロードされます。インターフェイス参照を、それを必要とするすべてのコントローラーに渡します。しかし、StructureMap を使用すると、この種の作業が非常に簡単になります。

アプリケーションの構造について詳しく知らなければ、どちらがより適しているかを判断するのは困難です。モデルがデータを取得するために呼び出す、遅延ロードされたシングルトン オブジェクトを使用できます。シングルトン オブジェクト自体は、最初の使用時にデータをロードします。Jon Skeet のC# でのシングルトン パターンの実装を確認してください。

たぶんあなたは不必要に心配していますが。ファイルが小さい場合、最初の読み取りでデータがディスクからキャッシュに取得され、その後、ファイルを読み取るための呼び出しがキャッシュから満たされる可能性があります。呼び出しごとに XML を解析するコストは依然としてかかりますが、ファイルは既にメモリ内にあるため、ファイルの読み取りは安価です。現在十分に高速に機能しており、リクエスト数の大幅な変化が見込めない場合は、他の最適化に労力を費やしたほうがよいでしょう。

于 2013-10-04T20:24:47.057 に答える
2

私の現在の解決策は、xml ファイルを使用する代わりに、どこからでも値に直接アクセスできるグローバル リソース ファイル (.resx) を使用することです。しかし、xmlでこれを行う良い方法があれば、私はそれを聞くことにまだ興味があります.

于 2013-10-04T20:14:49.347 に答える