2009-03-29 7 views
3

これは次のとおりです。ページが読み込まれるたびにアプリケーション(「WebAppName」)などのアプリケーション変数を10〜20回確認するのは費用がかかりますか?ASP.NETアプリケーション変数を何度も呼び出すのはどれくらいの費用がかかりますか?

背景:(批評気軽に)

いくつかは私のサイトに含まれるが、異なる経路での算入による相対URLを使用することはできません多くのリンクや画像が含まれています。

したがって、これらは

<img src="<%=Application("Webroot")%>images\image.gif"> 

の頻繁なインスタンスを含む含んではこのようなアプリケーション変数を呼び出して維持することが高価ですか?

アプリケーションの値を必要に応じて使用するローカル変数に入れるだけでよいですか?

重要:

私はそれがルートWeb(「/」)または仮想サブWeb(「/アプリ」)であるかどうか、サーバー上で正常に実行するために私のWebアプリケーションが必要です。

事前に知恵を共有していただきありがとうございます。

答えて

4

非常に安い - ちょうど辞書検索。他のほとんどのアプリケーション(ディスクやネットワークから何かを読み込む)で行うことと比較すると、統計的なノイズになります。

一般的には、このようなことが心配な場合は、小節です。任意にページに10,000回の呼び出しを入れ、それがどのようにパフォーマンスに影響を与えるかを確認します。並行性にもどのような影響があるかをご覧ください。複数の同時リクエストを処理する際に必要なスループットは引き続き得られますか?

+0

OPの利益のために。特に、データベースに問い合わせたり、http/htmlの応答をクライアントに返すなど、馬鹿げた*安価です。 10〜20回は、ボトルネックが顕著になることはまずありません。 –

+0

私は私の答えをもっと強調します:) –

0

使用Request.ApplicationPath代わりに(アプリがIISの仮想ディレクトリとして設定されている場合のみ動作します)

0

短い答え - それを測定し、自分の環境を決定します。私はそれが問題ではないと言います。

長い答え - とにかく何かに巻き込まれたコールが必要です... WebConfiguration.Rootのように。 これにより、将来的にいつでも最適化を行うことができます。

2

Applicationオブジェクトは、ReadWriteObjectLock(lockキーワードを使用する内部クラス)を使用する同期コレクションです。コレクションから読み取るだけの場合は、前述のJonのようにハッシュテーブル参照と同じくらい速くなりますが、同時に誰かがこのコレクションに書いている場合、読者は書き込みが完了するまでブロックします。パフォーマンスについてあまり心配している場合は、インデクサーを一度呼び出してローカル変数に格納し、この変数をビューで使用してください。

4

だけの情報のため、別のオプションは次のとおりです。

<img src="<%=VirtualPathUtility.ToAbsolute("~/images/image.gif")%>" 

これは、あなたが仕事をするための拡張メソッドを書くかもしれませんMVC、に特に適しています、すなわち

<%=Html.Image("~/images/image.gif")%> 
+0

非常に役に立ちます。このヒントをありがとう。 –

関連する問題