LINUX.ORG.RU

История изменений

Исправление 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