Phase 29 of 30 · Topic 29.1

Native AOT vs JIT Compilation Architecture

1Concept

Native AOT (`PublishAot=true`) compiles C# directly to native machine binaries (ELF on Linux / Mach-O on macOS / PE on Windows) with an embedded minimal runtime, completely eliminating the JIT compiler and JIT startup stalls.

2Architecture Diagram

JIT Execution:
C# ──> IL Bytecode ──> CLR Loads JIT ──> Tier 0 JIT Compile on Startup (100-300ms startup)

Native AOT Execution:
C# ──> Ahead-of-Time Native Compiler ──> Pure Native Machine Binary (Sub-10ms Instant Startup!)

3Code Example

C# 13 & .NET 9
using System;

public class NativeAotConceptDemo
{
    public static void Main()
    {
        Console.WriteLine("Native AOT project configuration (.csproj):");
        Console.WriteLine("<PropertyGroup>");
        Console.WriteLine("    <PublishAot>true</PublishAot>");
        Console.WriteLine("    <InvariantGlobalization>true</InvariantGlobalization>");
        Console.WriteLine("</PropertyGroup>");
    }
}

4Expected Output

Native AOT project configuration (.csproj):
<PropertyGroup>
    <PublishAot>true</PublishAot>
    <InvariantGlobalization>true</InvariantGlobalization>
</PropertyGroup>

5Key Takeaways

  • Enables instant sub-10ms startup in AWS Lambda and Azure Functions.
  • Reduces Docker image sizes to under 30MB.
  • Produces single standalone native executables without requiring .NET runtime installation.