문제

내 ASPX 페이지에 인라인 C# 코드 블록이 없다고 가정 해 봅시다.

그래서 안전하게 설정할 수 있습니다

<pages compilationMode="Never" />

... 내 web.config 파일에서 컴파일 오류에 대해 걱정하지 않습니다.

성능 측면에서 다음 설정을 사용하는 데 페널티가 있습니까?

<pages compilationMode="Auto" />

즉, "자동"탐지에는 상당한 시간이 걸리나요?

도움이 되었습니까?

해결책

의 영향 자동 아주 적은 것으로 보입니다. (분명히 이상 절대).

코드를 검사하면 System.Web.ui.templateParser, 우리는 봅니다 ImportSourceFile 모드가 설정되면 그 프로세스가 일찍 중단됩니다. Never:

if (this.CompilationMode == CompilationMode.Never)
{
    return null;
}

물론 도움이되고 확실히 가장 낮은 충격입니다. 그러나 루틴을 계속 진행합니다 TemplateParser, 우리는 볼 수 있습니다 ParseStringInternal 파서는 문자 그대로로드 된 템플릿을 스캔합니다. <%:

if (!this.flags[2] && (match = BaseParser.aspCodeRegex.Match(text, startat)).Success)
{
    string str3 = match.Groups["code"].Value.Trim();
    if (str3.StartsWith("$", StringComparison.Ordinal))
    {
        this.ProcessError(SR.GetString("ExpressionBuilder_LiteralExpressionsNotAllowed", new object[] { match.ToString(), str3 }));
    }
    else
    {
        this.ProcessCodeBlock(match, CodeBlockType.Code, text);
    }
}

참고 BaseParser.aspCodeRegex, 이 패턴의 인스턴스입니다.

public AspCodeRegex()
{
    base.pattern = @"\G<%(?!@)(?<code>.*?)%>";
    ...
}

아무것도 만나지 않으면 단순히 움직입니다. 검색은 상당히 저렴한 작업입니다. 가장 큰 히트는 코드 블록이 실제로 발견되어 컴파일되는 경우입니다.

다른 팁

나는 그 제안에 동의하는지 확실하지 않습니다 자동 보다 성능이 뛰어나야합니다 언제나. 거기에 비슷한 이것에 대한 질문과 나는 궁극적으로 '자동'(및 비 체결 페이지)는 더 나은 확장 성을 제공하는 수단으로 소개되었으며, 반드시 더 나은 성능 (초기 컴파일/구문 분석 오버 헤드)을 넘어서는 것은 아닙니다.

만약에 자동 모든 시나리오에서 더 성능이 뛰어 났으므로 왜 기본값이 아닌가?

소규모 고정 수의 어셈블리가있는 응용 프로그램은 표준의 혜택을 누릴 수 있습니다. 언제나 설정 및 현장 전체 사전 컴파일; SharePoint와 같은 CMS-esque 시나리오의 경우 런타임에 페이지가 변경되는 경우 자동 전단 필요성에서 유일한 옵션입니다.

우리 시나리오에서 설명하기 위해 내가 잃어버린 것은 JIT에서 % 시간 앱이 예열 된 후에도 현장 전체의 사전 컴파일을 사용한 후에도 변동이 있고 때로는 60%보다 높습니까? 이것이 200-500의 어셈블리 배치와 공통적이라면 자동 이러한 시나리오에서도.

자동 보다 성능이 뛰어나야합니다 언제나, 인라인 C# 코드를 추가 할 때 안전한 실패입니다.

추가 시간은 페이지를 컴파일 해야하는지 결정하는 데 소비됩니다. 절대 옵션.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top