Do not use the IDE to write C # 's Hello World method
Submission: Lijiao font: [Increase decrease] Type: Reprint time: 2015-10-15 I want to comment
This article mainly introduces the use of the IDE to write C # 's Hello World method, the need for friends can refer to the next
Writing C # 's Hello World with the IDE, such as Visual Studio, is easy, but out of the IDE can you print Hello world? This is not to say that you are working out of the IDE, but instead learn about the CLR's execution model.
Hello World
Create a new Notepad, enter the following code, and save as HelloWorld.txt.
?
1234567891011 |
using System;
namespaceHelloWorld
{
classProgram
{
static voidMain(
string
[] args) {
Console.WriteLine(
"Hello World!"
);
Console.ReadKey();
}
}
}
|
Open the Visual Studio 2008 (2005,2010) command prompt
But changed to the HelloWorld.txt directory.
Run command: Csc/out:hello.exe HelloWorld.txt
If no accident, will compile the Hello.exe, can print out Hello world.
CLR execution model-compile time
The execution process of a CLR program is broadly divided into two steps, the compile period and the run time, and the process of compiling is roughly as follows:
The compile-time logic can also be divided into two steps:
The CLR (C #) compiler accepts source code files and compiles them into managed modules. The managed modules include IL code, metadata, and CLR prime components. The example above is to compile the HelloWorld.txt into a managed module.
The General Assembly will contain many source code files (only HelloWorld.txt) and resource files, and the second step is to merge each source code file and resource file corresponding to the compilation result into an assembly.
You can get a XX.dll or XX.exe assembly in two steps above. Like the Hello.exe above.
How does the compiler know whether to compile to a managed module or a resource file? In fact, you must explicitly tell the compiler how to compile each file, which corresponds to the build operation of the Visual Studio file properties.
Right-click any Visual Studio solution for the resource schema---Properties--and build actions:
Specifying CLASS1 as an embedded resource, using Ilspy view, will find just embedding Class1 in the assembly, named: namespace. File name:
You can even set a picture to compile so the compiler tries to compile it, but it will give an error.
Operating period
The assembly is generated above and the IL code in the assembly is not yet a code that can be run. Il is a CPU-independent machine language. The JIT (Just-in-time, real-time) compiler compiles to native code (CPU instructions) until the assembly is called. At run time, the CLR performs the following steps:
Check the security characteristics of the Assembly;
allocating space in memory;
The executable code in the assembly is sent to the JIT compiler, which compiles some of the cost machine code (CPU instructions).
The executable code of the assembly is compiled by JIT compilation when needed, and then the native code (CPU instructions) is cached for later execution in the program. Once the application terminates, the compiled native code is discarded as well.
For example, if you change the above code to:
?
12345 |
static void Main( string [] args) { Console.WriteLine( "Hello" ); Console.WriteLine( "World!" ); Console.ReadKey(); } |
The first WriteLine needs to be JIT-compiled before executing. The second WriteLine executes the code in the memory block directly, skipping JIT compilation, because the WriteLine code is compiled.
Due to the allocation of memory, JIT compilation process, and so on, so the program will cause some performance loss during the first run, write the net when the feeling is very obvious, according to F5 will wait a long time to display the first page.
The following simulation feels the process. Use a bunch of classes to extend memory allocation time, refer to this file Helloworld.css (the blog park does not support TXT format):
Run the command again: Csc/out:hello.exe HelloWorld.txt, Get Hello.exe, execute when found a certain delay will print out Hello world.
Raw-Cost machine code
Use. NET provides NGen.exe, you can compile the IL code for the Cost machine code. The above problem can be solved. NGen.exe has two functions:
Speed up application startup. Because the code is compiled into native code, the runtime does not need to spend more time compiling
Reduce the application's assembly. If a single assembly loads multiple processes at the same time. NGen.exe will compile the IL code and save it to a separate file. This allows the code to be shared in a way that is mapped to multiple processes in a "memory-mapped" manner. Avoid a single piece of code per process.
Run the Visual Studio 2008 (2005,2010) command prompt again
Run the following command: NGen install Hello.exe:
Command completion (on my machine about 10 seconds, to be able to re-enter the command to complete) after running Hello.exe will find that immediately can print out Hello world, there is no delay.
For Asp.net,microsoft also provides aspnet_compiler.exe, we can build a script (. bat) Precompiled program in the ASP. The following is an example (from Lao Zhao's program):
%systemroot%\microsoft.net\framework\v2.0.50727\aspnet_compiler-v/P. \mymvcdemo.web.ui-f-errorstack. \Compliled
PAUSE
About Aspnet_compiler.exe Not much introduction, interested in can search their own relevant information.
Do not use the IDE to write C # 's Hello World method