すべてのリソースへの基本パスを持つファイルがあります。たとえば:もちろんコードで競合状態が発生しますか?
build/scripts/script1.js
build/scripts/script2.js
私は、例えば、ベースパスを必要とする:
https://example.org/SuperDuperSite/build/scripts/script1.js
私が何を期待していたどのようなパスで、起動時にグローバル辞書にファイルをロードしました。辞書は一度だけ読み込まれる必要があります。残念ながら、私が知る限り、基本パスは最初のリクエストまで利用できません。だからasp.net私はapplication_start
ではなくapplication_beginrequest
を使用する必要があります。これについて悪い点は、マルチスレッドの問題に取り組まなければならないことです。私は本当に一度にそれをロードする必要がある場合には、すべて単一の要求のために呼び出されます
lock(_lock) {
if (_dictionary == null) {
LoadDictionary();
}
}
:次のコードの種類を書くために私を強制的に
。私は本当にこれが好きではありません。私は、パフォーマンス上の理由からすべてのリクエストをロックする必要はありません。一つの解決策は、私たちが思いついたの大学に話をした後、この溶液を用いだから、
if (_dictionary == null)
{
lock(_lock) {
if (_dictionary == null) {
LoadDictionary();
}
}
}
私はすべて単一の要求をロックオンするために必要とされないだろうが、複数のスレッドが起動時に、このセクションを取得してしまった場合、私はそれから保護しますそのオブジェクトがロック内で再びヌルであるかどうかをチェックします。このコードは動作するのでしょうか、競合状態に陥るでしょうか?
基本URLを含めるのが非常に複雑です。あなたがスタートアップ時に辞書にロードする道を行く理由はありますか? –
これを正しい角度から攻撃してもよろしいですか?相対パス要求を行うことができない理由はありますか? –
C#ではダブルチェックロックが安全です。コードサンプルの条件は逆ですが、他の細かいものです。 –