Diese Präsentation wurde erfolgreich gemeldet.
Wir verwenden Ihre LinkedIn Profilangaben und Informationen zu Ihren Aktivitäten, um Anzeigen zu personalisieren und Ihnen relevantere Inhalte anzuzeigen. Sie können Ihre Anzeigeneinstellungen jederzeit ändern.
From ‘dotnet run’
to “Hello World”
@matthewwarren
mattwarren.org
From ‘dotnet run’
to “Hello World”
http://raygun.com/apm
I ❤ ‘.NET Internals’
Understand one level below
your usual abstraction
Neal Ford
Demo – “Hello World”
Outline
• Main Components
• Hosting the runtime
• CLR Initialisation
• Type Loader
• JIT Compilation
• Everything Else
Main Components
CoreCLR Repository
• 2.6 million of source code, under src
• 8.2 million lines of test code
• 24,485 Files (7,466 source &...
Virtual Machine (VM)
• Type System, Generics
• Built-in Types
• Loading types/classes
• Threading
• Exception Handling and...
Hosting
Hosting API
1. Identify the managed entry point
2. Find and load CoreCLR.dll
3. Get an ICLRRuntimeHost2 Instance
4. Set st...
Demo – Hosting API
Initialisation
Initialising the CLR
• Phase 1 - Set-up infrastructure for all components
• Phase 2 - Initialise the core, low-level compo...
Demo - PerfView
ImageCourtesyof
JuliaEvans
@b0rk–jvns.ca
https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals
Type Loader
http://mattwarren.org/2017/06/15/How-the-.NET-Rutime-loads-a-Type/
JIT Compilation
http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a-
method-and-Tiered-Compilation/
Before JIT-ing
http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a-
method-and-Tiered-Compilation/
Before JIT-ing
After JIT-ing
http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a-
method-and-Tiered-Compilation/
Before JIT-ing
After JIT-ing with ‘Ti...
http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a-
method-and-Tiered-Compilation/
After JIT-ing with ‘Tiered Compilatio...
Everything Else
Marshalling and P/Invoke
Resources
• http://mattwarren.org/tags/#Internals
– Resources for Learning about .NET Internals
– Exploring the Internals ...
I ❤ ‘.NET Internals’
AMA
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
From 'dotnet run' to 'hello world'
Nächste SlideShare
Wird geladen in …5
×

From 'dotnet run' to 'hello world'

59.235 Aufrufe

Veröffentlicht am

Have you ever stopped to think about all the things that have to take place when you execute a .NET program? As the quote from Neal Ford says "Understand one level below your usual abstraction", this talk will look at why this is important and how can it help you if we apply it to the .NET framework. We will delve into the internals of the recently open-sourced .NET Core Runtime, looking at what happens, when it happens and why. Using freely available diagnostic tools such as PerfView, libraries including ClrMD and even the source code itself! Along the way we'll examine the Execution Engine, Type Loader, Just-in-Time (JIT) Compiler and the CLR Hosting API, to see how all these components play a part in making a 'Hello World' app possible.

Veröffentlicht in: Software
  • Als Erste(r) kommentieren

From 'dotnet run' to 'hello world'

  1. 1. From ‘dotnet run’ to “Hello World” @matthewwarren mattwarren.org
  2. 2. From ‘dotnet run’ to “Hello World” http://raygun.com/apm
  3. 3. I ❤ ‘.NET Internals’
  4. 4. Understand one level below your usual abstraction Neal Ford
  5. 5. Demo – “Hello World”
  6. 6. Outline • Main Components • Hosting the runtime • CLR Initialisation • Type Loader • JIT Compilation • Everything Else
  7. 7. Main Components
  8. 8. CoreCLR Repository • 2.6 million of source code, under src • 8.2 million lines of test code • 24,485 Files (7,466 source & 17,019 test) – 6,626 C# (956 source & 5,670 test) – 2,074 C and C++ – 3,701 IL – 93 Assembler, 43 Python & 6 Perl!!
  9. 9. Virtual Machine (VM) • Type System, Generics • Built-in Types • Loading types/classes • Threading • Exception Handling and Stack Walking • Event Tracing and Profiling • P/Invoke
  10. 10. Hosting
  11. 11. Hosting API 1. Identify the managed entry point 2. Find and load CoreCLR.dll 3. Get an ICLRRuntimeHost2 Instance 4. Set start-up flags and start the runtime 5. Preparing AppDomain settings 6. Create the AppDomain 7. Run managed code 8. Clean up https://docs.microsoft.com/en-us/dotnet/core/tutorials/netcore-hosting
  12. 12. Demo – Hosting API
  13. 13. Initialisation
  14. 14. Initialising the CLR • Phase 1 - Set-up infrastructure for all components • Phase 2 - Initialise the core, low-level components • Phase 3 - Start-up the low-level components, i.e. error handling, profiling API, debugging • Phase 4 - Start the main components, i.e. GC & AppDomains • Phase 5 - Final setup and send out a notification http://mattwarren.org/2017/02/07/The-68-things-the-CLR-does-before- executing-a-single-line-of-your-code/
  15. 15. Demo - PerfView
  16. 16. ImageCourtesyof JuliaEvans @b0rk–jvns.ca
  17. 17. https://docs.microsoft.com/en-us/dotnet/standard/garbage-collection/fundamentals
  18. 18. Type Loader
  19. 19. http://mattwarren.org/2017/06/15/How-the-.NET-Rutime-loads-a-Type/
  20. 20. JIT Compilation
  21. 21. http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a- method-and-Tiered-Compilation/ Before JIT-ing
  22. 22. http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a- method-and-Tiered-Compilation/ Before JIT-ing After JIT-ing
  23. 23. http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a- method-and-Tiered-Compilation/ Before JIT-ing After JIT-ing with ‘Tiered Compilation’
  24. 24. http://mattwarren.org/2017/12/15/How-does-.NET-JIT-a- method-and-Tiered-Compilation/ After JIT-ing with ‘Tiered Compilation’ - Optimised
  25. 25. Everything Else
  26. 26. Marshalling and P/Invoke
  27. 27. Resources • http://mattwarren.org/tags/#Internals – Resources for Learning about .NET Internals – Exploring the Internals of the .NET Runtime – Tools for Exploring .NET Internals – Presentations and Talks covering '.NET Internals' • Book of the Runtime (BotR) – https://github.com/dotnet/coreclr/tree/master/Document ation/botr
  28. 28. I ❤ ‘.NET Internals’ AMA

×