여기에 고급 성능 질문이 있습니다. 내 시나리오는 다음과 같습니다.미리 컴파일 된 XSLT, ReBase 및 NGEN
수천 개의 XSLT 문서가 포함 된 데이터베이스가 있습니다. 웹 사이트의 각 페이지마다 하나씩, 이렇게하면 XML이 HTML로 변환됩니다. ASP.NET 웹 서버 (팜)는 데이터베이스에서 XSLT 문서를로드하고이를 사용하여 각 웹 요청에 대해 HTML을 렌더링합니다.
저는 XslCompiledTransform을 사용하고 데이터베이스 새로 고침 사이에 캐싱 (30 분마다)하는 최적화를 구현했습니다. xsltc.exe를 사용하여 XSLT를 DLL로 미리 컴파일하여 성능을 향상시키는 방법을 모색 중입니다. 이것은 XslCompiledTransform이 생성하는 모든 동적 메서드 호출을 제거하기로되어 있습니다.
그래서 별도의 서버에서 XSLT를 파일에 쓰고 xsltc.exe로 실행합니다. 약 20 분이 걸리지 만 괜찮습니다. 그런 다음 각 웹 서버에 DLL을 놓습니다. 이제는 필요할 때마다 웹 서버에 DLL을 동적으로로드 할 수있게되었습니다.
byte[] bytes = File.ReadAllBytes(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "XsltDlls\\" + fileName + ".dll"));
Assembly assembly = Assembly.Load(bytes);
Type type = assembly.GetType(fileName);
XslCompiledTransform compiledTransform = new XslCompiledTransform();
compiledTransform.Load(type);
내가 디렉토리 및/또는 ngen.exe를 그들에 DLL을 REBASE.EXE 샤 우드 : 여기 XslCompiledTransform에 어셈블리를로드하는 데 사용하고 코드인가? ReBase는 약 5 분이 걸리고/대기열과 함께 NGEN.exe는 CPU가 심하게 눌리는 동안 약 10 분이 걸릴 것입니다 - 웹 서버의 트래픽 처리 기능에 영향을 미칠 가능성이 있습니다. 어셈블리에서 바이트를 읽음으로써 어셈블리를로드하는 방법을 감안할 때 네이티브 NGEN 이미지가 참조되거나 JIT가 계속 실행됩니까?
이 모든 것에 대한 통찰력은 대단히 감사하겠습니다!
malcolm