IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림)

黄舟
풀어 주다: 2017-03-10 11:24:40
원래의
1430명이 탐색했습니다.

Visual Studio 등 IDE를 사용하면 C#으로 Hello World를 작성하는 것은 매우 쉬운데, IDE 없이도 Hello World를 출력할 수 있나요? IDE 없이 작업한다는 의미가 아니라 CLR의 실행 모델을 배우기 위한 것입니다.

안녕하세요

1. 새 메모장을 생성하고 다음 코드를 입력한 후 HelloWorld.txt로 저장합니다.

아아아아

2. Visual Studio 2008(2005, 2010) 명령 프롬프트 프로그램

을 엽니다. IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림)

3. HelloWorld.txt 디렉터리로 전환합니다

IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림)

4. 다음 명령을 실행합니다: csc /out:Hello.exe HelloWorld.txt

IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림)

예상치 못한 일이 발생하지 않으면 Hello.exe가 컴파일되고 Hello World가 인쇄될 수 있습니다.

CLR 실행 모델 - 컴파일 시간

CLR 프로그램의 실행 프로세스는 크게 컴파일 기간과 런타임의 두 단계로 나누어집니다. 컴파일 기간 프로세스는 대략 다음과 같습니다.

IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림)

편집 기간은 논리적으로 두 단계로 나눌 수도 있습니다:

1. CLR(C#) 컴파일러는 소스 코드 파일을 받아들이고 이를 관리되는 모듈로 컴파일합니다. 관리되는 모듈에는 IL 코드, 메타데이터, CLR 헤더 및 기타 구성 요소가 포함됩니다. 위의 예에서 HelloWorld.txt는 관리되는 모듈로 컴파일됩니다.

2. 일반적으로 어셈블리에는 많은 소스 코드 파일(여기서는 HelloWorld.txt만 있음)과 리소스 파일이 포함됩니다. 두 번째 단계는 각 소스 코드 파일과 리소스 파일의 해당 컴파일 결과를 어셈블리로 병합하는 것입니다.

위의 Hello.exe와 마찬가지로 XX.dll 또는 XX.exe 어셈블리를 얻으려면 위의 두 단계를 수행하십시오.

컴파일러는 관리되는 모듈로 컴파일할지 리소스 파일로 컴파일할지 어떻게 알 수 있나요? 실제로 각 파일을 컴파일하는 방법을 컴파일러에 명시적으로 알려주어야 합니다. 이는 Visual Studio의 파일 특성 생성 작업에 해당합니다. Visual Studio 솔루션 리소스 솔루션-->속성-->빌드 작업:

파일을 마우스 오른쪽 버튼으로 클릭합니다.

IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림) Class1을 포함된 리소스로 지정합니다. ILSpy로 확인하면 Class1이 이름이 네임스페이스인 어셈블리에만 포함되어 있음을 알 수 있습니다.

IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림) 컴파일할 이미지를 설정하고 컴파일러가 이를 컴파일하도록 할 수도 있지만 오류가 보고됩니다.

운행기간

위에서 생성된 어셈블리에는 아직 실행 가능한 코드가 아닌 IL 코드가 포함되어 있습니다. IL은 어셈블리가 호출될 때까지 JIT(Just-in-Time) 컴파일러에 의해 네이티브 코드(CPU 명령어)로 컴파일되는 CPU 독립적 기계어입니다. 런타임 시 CLR은 다음 단계를 수행합니다.

1. 어셈블리의 보안 기능을 확인하세요.

2. 메모리에 공간을 할당하세요.

3. 어셈블리의 실행 코드를 JIT 컴파일러로 보내고 그 일부를 원시 코드(CPU 명령)로 컴파일합니다.

어셈블리의 실행 코드는 필요할 때 JIT 컴파일러에 의해 컴파일된 다음 나중에 프로그램에서 실행될 수 있도록 네이티브 코드(CPU 명령)가 캐시됩니다. 애플리케이션이 종료되면 컴파일된 네이티브 코드도 삭제됩니다.

예를 들어 위 코드를

using System;
namespace HelloWorld
{
   class Program
   {
        static void Main(string[] args) {
            Console.WriteLine("Hello World!");
            Console.ReadKey();
        }
    }
}
로그인 후 복사

로 변경하면 첫 번째 WriteLine은 먼저 JIT 컴파일된 다음 실행되어야 합니다. WriteLine 코드가 컴파일되었으므로 두 번째 WriteLine은 JIT 컴파일을 건너뛰고 메모리 블록의 코드를 직접 실행합니다.

메모리 할당, JIT 컴파일 프로세스 등으로 인해 프로그램을 처음 실행할 때 약간의 성능 저하가 발생합니다. 특히 ASP.NET을 작성할 때 이러한 느낌은 확연히 드러납니다. 홈페이지가 표시됩니다.

아래에서 이 과정을 시뮬레이션하고 경험해 보겠습니다. 여러 클래스를 사용하여 메모리 할당 시간을 연장합니다. HelloWorld.cs 파일을 참조하세요.

IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림) csc /out:Hello.exe HelloWorld.txt 명령을 다시 실행하여 Hello.exe를 가져옵니다. 실행 중에 Hello World가 인쇄되기 전에 특정 지연이 있는 것으로 나타났습니다.

네이티브 코드 생성

.NET에서 제공하는 NGen.exe를 사용하면 IL 코드를 네이티브 코드로 컴파일하여 위의 문제를 해결할 수 있습니다. NGen.exe에는 두 가지 기능이 있습니다:

1. 애플리케이션의 시작 속도를 높입니다. 코드가 네이티브 코드로 컴파일되기 때문에 런타임 시 컴파일하는 데 시간을 소비할 필요가 없습니다.

2. 애플리케이션 조립을 줄입니다. 여러 프로세스에서 동시에 어셈블리를 로드하는 경우 NGen.exe는 IL을 네이티브 코드로 컴파일하고 별도의 파일에 저장합니다. 이러한 방식으로 "메모리 매핑"을 통해 동시에 여러 프로세스에 매핑할 수 있으므로 코드를 공유하고 각 프로세스가 코드 복사본을 갖는 것을 방지할 수 있습니다.

Visual Studio 2008(2005, 2010) 명령 프롬프트 프로그램을 다시 실행하세요.

다음 명령을 실행합니다: ngen install Hello.exe:

IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림) 

명령이 완료된 후(내 컴퓨터에서는 약 10초 정도 소요되며 명령을 다시 입력할 수 있을 때까지 완료되지 않음) Hello.exe를 실행하면 지연 없이 즉시 Hello World가 인쇄되는 것을 확인할 수 있습니다.

위 내용은 IDE 없이 작성할 수 있는 C#의 Hello World에 대한 자세한 설명(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿