История изменений
Исправление lovesan, (текущая версия) :
Дело ни в какой не в VM. Avalonia - это огромный UI фреймворк, который рендерит на видеокарту. Там под капотом кроссплатформенная обвязка на все случаи жизни, которая включает как всякие Skia, так и всякий код, сглаживающий различия разных платформ. Там буквально просто дохера всего. И он еще мало жрет, для такого количества функциональности. И в дотнете нет никакого «линковщика», да впрочем с такими динамичными фреймворками, как Avalonia, он был бы бесполезен, там многое делается в рантайме, через рефлекшн и так далее.
Это просто глупо сравнивать с убожеством типа культей или GTK, они рядом не валялись по функциональности и динамичности.
Пустое приложение на C# жрет на винде мегабайт 15, на линуксе 20-30:
Hello.cs
using System;
Console.WriteLine("Hello, World!");
Console.ReadKey(true);
Hello.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<StartupObject></StartupObject>
<PlatformTarget>x64</PlatformTarget>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<DefineConstants>$(DefineConstants);TARGET_64BIT</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>$(DefineConstants);DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
</PropertyGroup>
</Project>
dotnet publish -c Release -r linux-x64 -o publish -p:UseAppHost=true ./Hello.csproj
Исходная версия lovesan, :
Дело ни в какой не в VM. Avalonia - это огромный UI фреймворк, который рендерит на видеокарту. Там под капотом кроссплатформенная обвязка на все случаи жизни, которая включает как всякие Skia, так и всякий код, сглаживающий различия разных платформ. Там буквально просто дохера всего. И он еще мало жрет, для такого количества функциональности. И в дотнете нет никакого «линковщика», да впрочем с такими динамичными фреймворками, как Avalonia, он был бы бесполезен, там многое делается в рантайме, через рефлекшн и так далее.
Пустое приложение на C# жрет на винде мегабайт 15, на линуксе 20-30:
Hello.cs
using System;
Console.WriteLine("Hello, World!");
Console.ReadKey(true);
Hello.csproj
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net8.0</TargetFramework>
<StartupObject></StartupObject>
<PlatformTarget>x64</PlatformTarget>
<Nullable>enable</Nullable>
<AllowUnsafeBlocks>True</AllowUnsafeBlocks>
<DefineConstants>$(DefineConstants);TARGET_64BIT</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<DefineConstants>$(DefineConstants);DEBUG;TRACE</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
</PropertyGroup>
</Project>
dotnet publish -c Release -r linux-x64 -o publish -p:UseAppHost=true ./Hello.csproj