모든 리소스에 대한 기본 경로가있는 파일이 있습니다. 예를 들어 :코드로 경쟁 조건이 생성됩니까?
내가 할 바라고 무엇https://example.org/SuperDuperSite/build/scripts/script1.js
경로와 시작시 글로벌 사전에 파일을로드했습니다 : 물론
build/scripts/script1.js
build/scripts/script2.js
나는 예를 들어 기본 경로가 필요합니다. 사전은 한 번만로드하면됩니다. 불행히도, 내가 말할 수있는 한 기본 경로는 첫 번째 요청 때까지 사용할 수 없습니다. 그래서 asp.net에서 application_start
보다는 application_beginrequest
을 사용해야합니다. 이 점에 대해 나쁘다는 것이 이제는 멀티 스레딩 문제를 다루어야 만합니다. 난 단지 정말 한 번을로드 할 때
lock(_lock) {
if (_dictionary == null) {
LoadDictionary();
}
}
이것은 모든 단일 요청에 대해 호출 할 것이다 : 저를 강제로
코드의 다음과 같은 유형을 작성합니다. 나는이 사실을 정말로 좋아하지 않는다. 성능상의 이유로 모든 요청을 잠글 필요가 없습니다. 한 가지 해결책은, 대학 이야기 후 우리가 해낸 것을 : 나는 모든 단일 요청에 잠글 필요하지 않을 것입니다이 솔루션 그래서
if (_dictionary == null)
{
lock(_lock) {
if (_dictionary == null) {
LoadDictionary();
}
}
}
하지만 여러 스레드가 시작시이 부분을 받고 결국 있다면 나는 그 보호 할 수 객체가 자물쇠 안에 다시 있는지 검사하여 이 코드가 작동할까요, 아니면 경쟁 조건에 부딪 힐까요?
기본 URL을 포함하는 데 많은 복잡성이 있습니다. 시작할 때 사전에로드하는 경로를 결정한 이유가 있습니까? –
당신은 이것을 올바른 각도에서 공격하고 있습니까? 상대 경로 요청을 할 수없는 이유가 있습니까? –
C#에서는 이중 잠금이 안전합니다.코드 샘플의 조건은 역순이지만 다른 괜찮습니다. –