2009-12-11 3 views
2

DataLink와 함께 XSLT 또는 CLR을 사용하는 XML이 더 빠릅니다. CLR + Databinding이라고 가정하고 있지만 잘못된 것일 수 있습니다.더 빠릅니다. XML + XSL 또는 CLR + DataBinding

+0

감사를 볼 수 있을까 ... 대부분의 사람들은 아마 말할 것 그것은 개별 사례에 따라 달라집니다 ... – LorenVS

+1

그것은 개별 케이스에 따라 달라집니다 ... –

답변

4

이것은 내가하는 거의 모든 작업이 데이터를 생성하는 사용자 지정 .NET 기반 백엔드 (XSLT 디자인 레이어를 중심으로 돌아가며)입니다.

  • 당신이 System.Xml.Xsl.XslCompiledTransform의 캐시 된 인스턴스를 사용 절대적으로 확인 : 본인이 아는

    염두에 보관해야하는 몇 가지가있다. 이 클래스는 절대적으로

    • 이 XSLT 변환에 입력으로 올바른 데이터 구조를 사용하여 매우 빠른 당신의 XSLT 변환을 퍼내는 것이다 수요 클래스를 만들 수 System.Reflection.Emit을 사용합니다. 사용할 수있는 XmlDocument (또는 더 나은 XPathDocument)가 있으면이를 사용하십시오. 그렇지 않으면 XslCompiledTransform이 XPath 액세스에 최적화 된 XPathDocument로 문서를로드하므로 매우 큰 입력 문서와 변환이 XML 판독기 (사용 가능한 경우)로 전달됩니다. 추가하기 만하면 XElement에서 XPathNavigator를 만드는 System.Xml.Linq.XElement 형식의 System.Xml.XPath 확장 메서드가 있습니다.이 메서드는 원본 데이터 구조가 XElement 인 경우 유용 할 것입니다

    • xsl 변환에서 msxsl : script 태그를 사용하지 마십시오. msxsl : 스크립트 태그는 나머지 xslt와는 다르게 컴파일되어 고 수요 응용 프로그램에서 심각한 메모리 누수가 발생할 수 있습니다. (xslt가 실행될 때마다 사용자 지정 어셈블리를로드합니다.)

    • 다음과 같은 확장 메서드를 사용하지 마십시오. 가능한. XSLT 변환에서 확장 메서드를 실행하기 위해. NET 원본에 이르기까지 (반투명 FTW) 분해하고, 실제로는 MethodInfo.Invoke()를 호출하는 것 이상입니다. 몇 가지 호출이 응용 프로그램을 망치지는 않지만 확장 메서드를 사용하여 모든 XSLT의 단점을 보완 할 수 있다고 생각하지는 않습니다 (향후 버전의 프레임 워크에서 변경 될 수 있습니다. 사용자 지정 해시 시스템의 확장 메서드를 캐싱하기 때문에, 그것은 매우 그들이 번개가 빨리 될 컴파일 된 linq 표현을 사용하여 번역 할 수있다)

    • 내 지식을 최대한으로, System.Web.UI.DataBinder 여전히 호출 종소리로 종기 Eval ("MyProperty") 문을 평가하기 위해 System.Reflection.MethodInfo.Invoke()를 사용하는 System.ComponentModel.ReflectPropertyDescriptor입니다. 이것은 두 모델 간의 성능 측면에서 가장 큰 비교 중 하나입니다. 리플렉션 호출의 수를 최소화함으로써 XSLT가 여기에서 우위를 차지합니다.

    • 조정되지 않은 xslt 파일을 작성하는 것은 매우 쉽습니다. xsl 변수를 올바르게 사용하면 xml 출력을 생성하는 데 필요한 많은 반복 작업을 실제로 제거 할 수 있습니다. 일반적으로 참조되는 입력 요소가있는 경우 xsl 변수에 저장하여 거기에서 액세스하십시오.

    • xsl 출력을 응답 스트림에 직접 작성할지 여부에 따라 다릅니다. 버퍼의 크기를 올바르게 조정하십시오. 설정에 따라 변환 MemoryStream의 기본 버퍼 크기는 엄청난 양의 메모리 할당 (일반적으로 xsl 변환 컨텍스트에서 상당히 큽니다)을 저장합니다.

    • 실제로 이것은 응용 프로그램 수준의 우려가됩니다. XSLT 변환을 사용하는 동안 컨트롤 생성, 뷰 상태 직렬화, 이벤트 지속성 등 등의 전체 오버 헤드를 피할 수 있습니다. 페이지 라이프 사이클을 훨씬 더 쉽게 생성 할 수 있습니다 (중간에 던져진 몇 가지 사항으로 변환, 데이터 변환). XSLT 기반 시스템에 가장 적합합니다.

전반적으로, 내 돈이 제대로 XSLT 변환 구현 잘 구조에 확실히. 특히 메모리 변환에 사용할 수있는 충분한 RAM이있는 시스템에서. XSLT 변환이 상당히 놀라운 수준으로 확장되는 것을 보았습니다. 몇 가지 중요한 요점을 배우게되면 유지 관리가 그다지 어렵지 않습니다. 내가 어떤 다른 사람을 기억하고 내가 할 경우이 게시물을 편집 할 경우

나는 두 가지를 비교 사랑 만하기 때문에 ... 질문 사람을 물어 위해 ...

+0

질문이 모호하기 때문에이 답변의 상당 부분이 실제로 관련성이 있습니다. 그러나 그렇다고하더라도 그것은 훌륭한 정보입니다. –

3

허위 일반화에 따라 (아마 잘못된) 답변을 얻으려고 시도하는 대신 특정 유스 케이스를 벤치 마크해야합니다.

+0

+1하지만 XSLT 말에 내기 –

관련 문제