1

ASP.NET MVC 4アプリケーションで作業していて、アプリの起動時に、BuildManagerを使用して、参照されているすべてのアセンブリを取得しています。アプリケーション内のすべての種類を調べて、必要なものをいくつか見つけています(動的です)。そのため、起動するまで必要なタイプがわかりません)。

基本的に私のコードは次のようになります。

var allTypes = BuildManager.GetReferencedAssemblies()
                  .Cast<Assembly>()
                  .SelectMany(a => a.GetTypes());

私はこれをアプリの起動時だけでなく、動的に型を見つけるために新しいリクエストの開始時にも呼び出しています。

だから私の質問は:

  1. ASP.NETは必要になるまでアセンブリをロードしないので、呼び出すことで、BuildManager.GetReferencedAssemblies()必要になる前にすべてのアセンブリをロードし、パフォーマンスの問題を引き起こしますか?
  2. すべてのタイプを繰り返すことは、リクエストごとに悪い考えですか?タイプをキャッシュすることはできますが、ASP.NETには、キャッシュした後にアセンブリを動的にロードするオプションがあります。もしそうなら、私は確かにそこにあるいくつかのタイプを見逃すかもしれません。

ありがとう!

4

1 に答える 1

1

すべてのリクエストを実行しないでください。できるだけ早くキャッ​​シュを実行してください。反射が遅いです。

すべてのアセンブリをプリロードし、アプリの起動時に実行します。私は多くのWebサイトで使用しているシステムを持っており、デプロイされたアセンブリに基づいて多くの動的な処理を実行する必要があり、起動時にすべての作業を行います。

はい、したがって起動は遅くなりますが、各リクエストに時間がかかるよりも問題は少なくなります。

次に、デプロイされたすべてのアセンブリを確実にプリロードする方法について、私がしばらく前に尋ねて回答した質問に興味があるでしょう。AppDomainのすべてのデプロイされたアセンブリをプリロードする方法

私は今でも同じプロセスを使用しており、それは魅力のように機能します。

于 2012-08-29T16:31:17.047 に答える