문제

우리의 빌드 과정에서 우리는 실행합니다 aspnet_compiler.exe ASP.NET/MVC의 모든 늦은 부분이 실제로 구축되는지 확인하기 위해 웹 사이트에 대해 (ASP.NET에 대해서는 아무것도 모르지만 런타임에서 실패를 찾지 못하도록해야한다고 확신합니다).

당사 사이트의 크기는 상당히 큽니다. 수백 페이지/뷰/컨트롤/등이 있습니다. 그러나 시간은 10-15 분 범위에서 과도한 것으로 보입니다 (참조 용으로, 이는 약 40 개의 프로젝트가 컴파일하는 데 전체 솔루션이 필요하며 두 개의 웹 사이트 프로젝트 만 사전 컴파일하는 것보다 길다).

4GB RAM과 WD Velociraptor 10,000rpm 하드 디스크를 사용하여 최신 쿼드 코어 인텔 칩에서 실행될 때 하드웨어가 문제라고 의심합니다. 그리고 이상한 점 중 일부는 EXE가 CPU (1-5%)를 많이 사용하지 않는 것 같고 많은 I/O를 많이하지 않는 것 같습니다.

그래서 ... 이것은 알려진 문제입니까? 왜 그렇게 느린가요? 그리고 속도를 높이는 방법이 있습니까?

메모: 사람들이 대답 한 몇 가지 사항을 명확히하기 위해 Visual Studio 내에서 코드 편집에 대해 이야기하지 않습니다. 우리는 이미 웹 애플리케이션 프로젝트를 사용하고 있으며, 이에 대한 편집 속도는 문제가되지 않습니다. 문제는 사이트의 사전 컴파일입니다 ~ 후에 이 프로젝트는 이미 컴파일되었습니다 (자세한 내용은이 MSDN 페이지를 참조하십시오) Dev 빌드 스크립트의 일부로. 파일을 대상 디렉토리에 복사하지 않고 사전 컴파일을 수행하고 있습니다.

도움이 되었습니까?

해결책

  1. 컴파일러는 모든 .aspx 페이지에 대해 두 번째 코드 비해 파일을 생성해야합니다. 확인하다
  2. 컴파일하는 동안 ASPNET_COMPILER.EXE는 모든 웹 사이트 파일을 CSS, JS 및 이미지를 포함한 출력 디렉토리에 복사합니다.

더 나은 컴파일 시간을 사용하여 얻을 수 있습니다 웹 응용 프로그램 프로젝트 웹 사이트 모델 대신.

다른 팁

Roslyn 컴파일러로 전환하면 프리 컴파일 시간이 크게 향상 될 것입니다. 그것에 대한 좋은 기사는 다음과 같습니다. http://blogs.msdn.com/b/webdev/archive/2014/05/12/enabling-the-net-compiler-platform-roslyn-in-asp-applications.aspx.

이 외에도 배치 속성을 컴파일 요소에서 true로 설정하여 배치 컴파일이 활성화되어 있는지 확인하십시오.

간단히 말해 aspnet_compiler 개별 ASPX 페이지를 사전 컴파일하기 시작할 때마다 효과적으로 "글로벌 컴파일러 잠금"을 사용합니다. 기본적으로 각 페이지를 순차적으로 컴파일 할 수 있습니다.

그 이유가 있습니다 (개인적으로 동의하지는 않지만) - 주로 원형 참조를 감지하고 방지하기 위해 무한한 루프를 유발하고 필요한 페이지가 컴파일되기 전에 모든 종속성이 올바르게 구축되도록 보장하기 위해 피하십시오. 많은 "Nasty CS 문제".

나는 한때 거대한 포크 버전을 작성하기 시작했습니다 aspnet_compiler.exe 지난번에 나는 웹 회사에서 일했지만 "실제 작업"과 묶여서 결코 끝내지 못했습니다. 가장 큰 문제는 ASPX 페이지입니다. 지옥에서 병렬화 할 수있는 MVC/Razor 물건이지만 ASPX Parse/Compile 엔진은 약 20 레벨의 내부 및 개인 클래스/방법입니다.

이 컴파일러에 대한 구체적인 핫 팁은 없지만 이런 종류의 문제가있을 때 Procmon을 실행하여 프로세스가 기계에서 수행하는 작업을 확인하고 Wireshark를 실행하여 연령대의 타이밍을 소비하지 않는지 확인합니다. -일부 레지스트리 키 또는 환경 변수에서 참조되는 오래 잊혀진 기계에 대한 일부 네트워크 액세스.

내 2 센트.

ASP.NET보기를 늦추는 것 중 하나는 선행 문제가 크게 -fixednames 명령 줄 옵션 aspnet_compiler.exe. 그것을 사용하지 마십시오 특히 면도기/MVC에있는 경우.

Visual Studio에서 WEP 앱을 게시 할 때 "Mo n't Merge"를 선택하고 하지 마라 "별도의 어셈블리 만들기"를 선택하십시오. 왜냐하면 이것이 글로벌 잠금 장치를 일으키고 물건을 늦추는 것입니다.

enter image description here

더 많은 정보는 여기에 있습니다 https://msdn.microsoft.com/en-us/library/hh475319(v=vs.110).aspx

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