리플렉션 내보내기 응용 프로그램 시나리오

이 단원에서는 응용 프로그램에서 리플렉션 내보내기와 동적 메서드를 사용하는 일부 시나리오에 대해 좀더 자세히 설명합니다.

웹 브라우저에서 스크립트 실행

이 시나리오에서 웹 브라우저는 스크립트 프로그램이 포함된 HTML 페이지를 로드하고 해당 프로그램을 실행합니다. 이 기능을 구현하는 단계는 다음과 같습니다.

  1. 웹 브라우저가 웹 브라우저의 응용 프로그램 도메인에서 스크립트 엔진을 시작합니다.

  2. 웹 브라우저가 HTML 페이지에서 스크립트를 추출하여 이를 스크립트 엔진에 전달합니다.

  3. 스크립트 엔진이 임시 동적 어셈블리를 만듭니다.

  4. 스크립트 엔진이 리플렉션 내보내기 API를 사용하여 코드를 동적 어셈블리로 내보냅니다.

ASP.NET 페이지에서 스크립트 실행

이 시나리오에서 브라우저는 스크립트 프로그램이 포함된 ASP.NET 페이지를 엽니다. 이 프로그램은 서버에서 컴파일되고 실행됩니다. 이 기능을 구현하는 단계는 다음과 같습니다.

  1. ASP.NET은 해당 응용 프로그램 도메인을 시작하고 프로그램을 컴파일하고 실행할 스크립트 엔진을 시작합니다.

  2. 스크립트 엔진은 동적 어셈블리에 지속 동적 어셈블리와 지속 동적 모듈을 만듭니다.

  3. 스크립트 엔진은 리플렉션 내보내기 API를 사용하여 프로그램을 컴파일하고 코드를 지속 동적 모듈로 내보냅니다.

  4. 컴파일된 코드가 실행되고 eval 식이 발생합니다.

  5. 스크립트 엔진은 동적 어셈블리에 임시 동적 모듈을 만들어 eval 식의 코드를 포함합니다.

  6. 스크립트 엔진은 임시 동적 모듈을 실행하여 eval 식을 계산합니다.

  7. ASP.NET에서는 동적 어셈블리와 지속 동적 모듈을 캐시에 저장하도록 스크립트 엔진에 요청하여 페이지가 다시 방문되더라도 스크립트가 다시 컴파일되지 않도록 합니다.

리플렉션 내보내기를 사용하여 정규식 컴파일

이 시나리오에서 컴파일러는 리플렉션 내보내기를 사용하여 소스 코드의 정규식을 컴파일합니다. 사용자는 컴파일해야 할 정규식을 선언할 수 있습니다. 이 기능을 구현하는 단계는 다음과 같습니다.

  1. 컴파일러는 사용자의 소스 코드에서 맨 처음 사용한 정규식을 처리합니다.

  2. 컴파일러는 사용자가 정규식을 컴파일하도록 요청했으므로 리플렉션 내보내기를 사용하여 해당 식을 사용자 지정 스캐너 클래스로 컴파일합니다. 정규식은 먼저 컴파일러의 정규식 opcode로 변환됩니다. 예를 들어 "0개 이상의 a를 찾으라"고 하는 명령이 있을 수 있습니다. 이러한 경우, 정규식 opcode는 MSIL(Microsoft Intermediate Language)로 변환됩니다. 예를 들어, 컴파일러는 찾은 모든 문자 항목을 반복하는 루프를 생성할 수 있습니다.

  3. 컴파일러는 컴파일된 스캐너 클래스를 저장하여 다음에 사용합니다.

  4. 컴파일러는 컴파일된 스캐너 클래스를 인스턴스화하고 현재 응용 프로그램 도메인의 코드를 실행합니다.

  5. 컴파일러는 사용자의 소스 코드에 있는 다음 번의 같은 정규식을 처리합니다.

  6. 컴파일러는 정규식의 컴파일된 스캐너 클래스를 검색하고, 인스턴스화하며, 현재 응용 프로그램 도메인에서 코드를 실행합니다.

정규식의 첫 번째 인스턴스를 사용할 경우 컴파일러에서 식을 스캐너 클래스로 컴파일해야하기 때문에 성능이 떨어질 수 있습니다. 그러나 같은 정규식을 다음 번에는 효율적으로 실행할 수 있습니다. 자주 사용하는 정규식의 경우 실행 시간이 크게 향상될 수 있기 때문에 한 번 컴파일할 경우의 성능 저하는 중요하지 않습니다.

참고 항목

개념

.NET Framework 정규식

기타 리소스

동적 메서드 및 어셈블리 생성

리플렉션 내보내기 사용