2012-11-21 4 views
4

UserControls를 만들 때 컨트롤이 초기화 될 때마다 XAML이 파싱되는 것처럼 보입니다.WinRT/Win8에서 XAML 구문 분석의 효율성은 어느 정도입니까?

public void InitializeComponent() 
{ 
    if (_contentLoaded) 
     return; 

    _contentLoaded = true; 
    global::Windows.UI.Xaml.Application.LoadComponent(this, new global::System.Uri("ms-appx:///Views/MyView.xaml"), global::Windows.UI.Xaml.Controls.Primitives.ComponentResourceLocation.Application); 

} 

이뿐만 아니라 실버 라이트에 존재 : 나는 UserControl을을 만들 때

예를 들어, 다음과 같습니다 구성 요소를 초기화하는 자동 생성 된 코드가있다.

컨트롤을 한 번 또는 두 번 만드는 것은별로 중요하지 않지만 Visual-States 및 바인딩이 포함 된 각 UserControl에 큰 시각적 트리가 있고 응용 프로그램 수명주기마다 여러 번 만들면 의미가 있습니다. C#을 사용하여 시각적 컨트롤을 구축하여 성능을 향상시킵니다.

는 그래서, 내 질문은 :

파서/프레임 워크는 XAML 파일을 "기억"과 후속 호출에 다시 재 구문 분석을 피할 수 있습니까? 즉, XAML의 이진 표현을 만들므로 텍스트를 다시 읽을 필요가 없습니다.

답변

0

XAML은 응용 프로그램 내에서 리소스로 이진 형식으로 컴파일됩니다. 런타임은 .csam 파일의 구문을 분석 할 필요가 없듯이 .xaml 파일의 텍스트를 구문 분석 할 필요가 없습니다.

XAML로 선언 된대로 클래스를 인스턴스화하는 성능은 코드에서 코드를 만드는 것과 동일합니다.

+0

이것은 WPF의 경우입니다. 라이브러리를 컴파일하면 코드 파일과 BAML 파일이 생성됩니다. 그러나 Silverlight 및 WinRT에는 BAML이 없으므로 컴파일 된 DLL을 들여다 보면 실제로 XAML 파일이 일반 텍스트로 표시됩니다. 따라서 LoadComponent (...) 메서드의 동작이 의심 스럽습니다. – Laith

+1

Windows Phone 8 용 Silverlight에서 XAML의 이진 직렬화를 추가 한 것처럼 보였습니다. 그러나 Windows 8에서이 기능에 대해 들어 본 적이 없었습니다. 성능 차이를 확인할 가치가 있을지 모르지만, 처리량에 비해 무시할 수 있을지도 모릅니다 레이아웃 업데이트. –

0

윈도우 8.1 XAML은 마지막으로 XAML 이진 형식 :

XAML 바이너리 형식을 추가 :이 바이너리로 변환 얻을 것이다으로 최종 서명 appx가 더 이상 텍스트 기반의 마크 업을 포함하지 않습니다.

관련 문제