2013-09-04 4 views
2

불행히도 저는 모든 것을 위해 XSL을 사용하는 웹 사이트에서 일하고 있습니다. 성능은 입니다.입니다. JIT에서 보낸 시간은 30 %입니다!XslCompiledTransform을 사용하는 올바른 방법은 무엇입니까?

나는이 회사가 작은 사이트를 운영하기 위해 4 개의 서버를 필요로한다는 사실을 항상 XSL에 맡긴다. 그러나 마침내 적절한 perf 검토를하고 있지만 XSL은 완전히 범인이지만 XSL은 ' 원래의 프로그래머 (자바 스크립트 사용자)가 XslCompiledTransform 유형을 오용했다는 사실을 알지 못했습니다.

문제는이 API를 직접 사용할 수 없다는 것입니다. 이 클래스는 컴파일 캐싱이 포함 된 .NET 2.0 용으로 갱신되었습니다. 나는 하루 종일 캐싱이 작동하는 상황에서 운동하려고 노력했다. 원래 코드는 각 변형에 대해 XslCompiledTransform까지 새롭게 작성되었지만 올바르게 보이지는 않았지만 정적으로 만드는 것도 도움이되지 않습니다. 성능 프로파일 링은 개선되지 않았습니다.

또한 디버거 출력 창에서 동일한 스타일 시트에 대해 이 표시되어 컴파일 할 때마다 다시로드됩니다.

갑자기 캐싱을 수행해야합니다. 즉, 미리로드되거나 지연로드 된 각 스타일 시트에 대해 XslCompiledTransform 인스턴스 중 하나를 사용하여 상점을 유지해야합니다.

이게 맞습니까? 하나의 인스턴스를 유지하고 각 스타일 시트에 대해 Load을 여러 번 호출하는 것은 올바르지 않습니까?

+0

이보고에서 되세요 XSLT 컴파일러 (xsltc.exe) 및 런타임 대신 빌드시 XSL 변환 컴파일 ... http://msdn.microsoft.com/en-us/library/bb399405.aspx .... http : // stackoverflow .com/questions/615991/가장 빠른 메모리 캐시 - xslcompiledtransform –

+0

사용 방법보기 : http://blogs.msdn.com/b/spike/archive/2009/07/10/improving-xslcompiledtransform- performance.aspx –

+2

네, 제 생각에 XslCompiledTransform을 캐싱해야합니다. 그것은 내부적으로 이루어지지 않습니다. 캐싱을 실제로 수행하는 방법에 대한 우수 사례를 처음 접한 적이 없지만 여러 항목을 추적해야 할 때 대개 키가 각 변환의 이름 인 'Dictionary '을 유지합니다. 사전에 내가 실행하고 싶은 것이 없다면, 그것을로드하고 사전에 추가하십시오. 그러나 결국에는 캐싱을 수행하고 스레드 동시성 문제와 잠금은 웹 사이트를위한 것이므로 조심해야합니다. – JLRishe

답변

2

스타일 시트를 컴파일하는 것은 종종 실행하는 것보다 시간이 오래 걸립니다. 스타일 시트를 한 번 컴파일하고 CompiledStylesheet 객체를 재사용하여 각 변환을 실행해야합니다.

(덕분에 존 니콜라스 추천은 색슨를 사용하고, 색슨 API 그냥 쉽게 오용 될 수 있기 때문에, 나는 진심으로 그 보증 것이지만,이 문제에 정말 관련이 아니에요을 위해.)

0

C# dev id는 xslt의 saxon 경로를 권장합니다.

http://saxon.sourceforge.net/

경우 구식의 XPath의 MS의 구현입니다. 또한 그것의 모든 그 빠른.

관련 문제