LINUX.ORG.RU

.Net AvaloniaUI Маленький вопрос

 avaloniaui, netcore


0

3

Приветствую, решил потыкать палкой AvaloniaUI, собрал простейшей приложение из одного пустого окна, запустил, после заглянул в менеджер процессов и малость офигел - потребление памяти больше 100Мб на одном пустом окне О_о. Как-то уменьшить нельзя?

https://add.pics/Y6KeId

★★★★★

Ответ на: комментарий от anonymous

Благодарствую, попробовал, запустить с ключом -c Release - ситуация странная, использование памяти вроде как уменьшилось, но теперь запустилось аж 3 процесса, и суммарно потребление примерно тоже самое что и было… Жесть конечно, как на этом вообще UI делать можно? Я конечно понимаю, что память нынче по цене воздуха, и её много, но не на столько же… ( https://add.pics/Y6QQh3

xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 1)

Для начала релиз собирай. И вялого выкинь, от вялого не такое бывает. Да, напиши как собирал и что за запускалка дотнета у тебя в линуксе (какой линукс, где брал дотнет, как называется пакет, какая версия дотнета, а то может ты на 5 всё ещё сидишь)

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 2)
Ответ на: комментарий от peregrine

Собираю, можно ли это назвать сборкой, просто захожу в папку с тестовым проектом и выполняю «dotnet run», на этом собственно всё. Попробовал добавить ключ «-c Release» (dotnet run -c Release) особо ничего не меняется, похоже что как запускалось 3 процесса, так и осталось. Тест создавался путем выполнения: «dotnet new avalonia.mvvm» Т.е:

  1. Создаём в какой-нибудь тестовой папке проект выполняя: dotnet new avalonia.mvvm
  2. Из этой же папки запускаем: dotnet run
  3. Открываем менеджер процессов и офигеваем (
Информация  "dotnet --info"
ПАКЕТ SDK ДЛЯ .NET:
 Version:   6.0.420
 Commit:    ea26d0c148

Среда выполнения:
 OS Name:     linuxmint
 OS Version:  20.3
 OS Platform: Linux
 RID:         linux-x64
 Base Path:   /usr/share/dotnet/sdk/6.0.420/
xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 2)
Ответ на: комментарий от xterro

Ну, всё печально. Во первых, многие вещи хорошо показываются от Dotnet 7.0+. Так написано в документации. Во вторых это debug, а не релиз. Посмотри как пацаны собирают проект, команды по-вводи.

anonymous
()
Ответ на: комментарий от hateyoufeel

16 гигов оперативы это уже нищук или ещё нет? )

P.S. Запустил простое окошко на wxPython с некоторым кол-вом контролов - ~20Mb, а тут пустое окно ~150Mb… боль конечно :\

xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 1)

Вот ещё нарыл. https://github.com/AvaloniaUI/Avalonia/issues/4491 Интересное.

Но… мне реально стало интересно (я анон этого поста), а писать Авалонии лень пока, пусть причёсывают. Так вот, я полез в список созданных приложений. Качнул https://github.com/namigop/FintX Потребляет 200 метров в работе. Может реально GPU шейдеры, я хз.

anonymous
()

Занятно.

На свежей виртуалке с убунтой и net 8 после «dotnet build --configuration Release» получается вот так: https://imgur.com/tnwN6aO

Правда если начинать окно ресайзить, то начинаются аллокации. После где-то минуты постоянного дергания окна уже вот так: https://imgur.com/lB86rdC

Это wayland с vmware графикой (так что на реальном железе ymmv). Под иксами то же самое поведение

но теперь запустилось аж 3 процесса

Это у тебя возможно процессы компилятора остались, которые работают как билд сервер (https://github.com/dotnet/sdk/issues/9487)

PS. https://github.com/AvaloniaUI/Avalonia.Samples - проекты отсюда, но там везде net6.0 в csproj, можно поменять руками

Midael ★★★★★
()
Последнее исправление: Midael (всего исправлений: 2)

Проверил свою программку(не большую), которую сейчас делаю, 170Мб. Это на Qt6. Но у меня там конечно не просто пустое окно, но и не хром конечно. Сейчас проверю пустое окно на кутях.

Проверил. Пустое окно QtWidgets памяти ест 60Мб. Я к тому, что 100Мб это может быть не так и много для языка с VM унутре.

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 2)

Если у пользователя будет 4гб свободной памяти, он сможет запустить 40 твоих приложений одновременно. Я посмотрел, у меня за сотню почти все приложения занимают, не думаю что твоя ситуация какая то страшная.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 1)
Ответ на: комментарий от Loki13

Дело ни в какой не в 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 ★★
()
Последнее исправление: lovesan (всего исправлений: 1)
Ответ на: комментарий от MOPKOBKA

Чем оно лучше Electron?

Тем что не JS? Всё же C#, как язык, много приятнее.

Тут скорее с жабой надо сравнивать, но и тут C# будет приятнее(на мой вкус).

Loki13 ★★★★★
()
Последнее исправление: Loki13 (всего исправлений: 1)

Вопрос в том, как растет потребление памяти. Возможно там подгружается много всего необходимого для работы, но с каждым новым окном прирост потребления незначительный. Частая «проблема» у всего большого и кросс-платформеннного.

Ghostwolf ★★★★★
()
Ответ на: комментарий от xterro

Ну попробуй свежий дотнет у мелкомягких забрать. 6 версия это очень давно было, банально с тех пор много вкусного появилось, одни FrozenSet и FrozenDictionary чего стоят. Тем более 8 дотнет (актуальный на момент поста LTS так что нет смысла за 6 цепляться)

peregrine ★★★★★
()
Ответ на: комментарий от alysnix

Снаружи. Юзеру надо будет, он поставит свежий. Тем более если ты сегодня начнёшь продукт писать, то готов для конечного юзера он будет не сегодня, к тому моменту уже и 8 дотнет депрекатед будет. Так что в разработке вообще нет смысла смотреть на старые дотнеты.

peregrine ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Ты просто скажи, научили ли electron улавливать нажатие windows(super/compose) клавиши на клавиатуре в онтопике? А то моя последняя попытка использовать visual studio code вместо nvim-а провалилась из-за того что я захотел плагинчиками обмазаться в которых windows кнопка захардкожена, а под линуксами она с электроном не работает. Нынче не просто нагуглить причину, видимо гуглу она не очень нравится, потому такие вопросы https://stackoverflow.com/questions/67271181/why-windows-key-is-not-working-i... лежат без ответа, но причина в том, что windows key в электроне под линуксом в принципе не умеет работать. Там вроде как blink надо патчить который внутрях электрона рисует.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от anonymous

Это пустое кроссплатформенное окно, двигло которого берёт на себя работу компонентов ОС для отрисовки. Бери винформс и там всё будет как тебе нравится. Правда в виндовсе.

peregrine ★★★★★
()
Последнее исправление: peregrine (всего исправлений: 1)
Ответ на: комментарий от peregrine

а ты понимаешь, что юзеру влом из-за некоей аппы, если конечно это не аппа, от которой зависит его зарплата, ставить целый шарповый рантайм. и жить с этим. а потом явский рантайм, ибо охотников присать на жаве - еще и поболе чем на шарпе.

alysnix ★★★
()
Ответ на: комментарий от peregrine

Это зависит от DE, и наверное графического сервера. Может еще возникнуть баг, когда Alt+Shift вызывает появление меню Убрать выскакивающие меню в Electron приложениях для Gnome 3

MOPKOBKA ★★★★
()
Ответ на: комментарий от alysnix

А куда ты денешься с подводной лодки? Поставит как миленький и даже знать не будет что поставил если совсем ламер, в оффтопике установщики рантайма дотнета прям в бинари зашивают, в линуксах в deb/rpm пакете в зависимостях прописывают.

peregrine ★★★★★
()
Ответ на: комментарий от MOPKOBKA

Ну вот сам и ответил на свой вопрос. Когда во фреймворке даже с клавиатурой работать не могут без привязке к фазе пятой луны Сатурна, то нафига такой фреймворк нужен.

peregrine ★★★★★
()
Ответ на: комментарий от peregrine

Поставил 8.0 Принципиально ничего не поменялось, пустое окно жрёт 75 Мб + время от времени запускается ещё 1-2 процесса dotnet, каждый их которых жрёт ещё столько же. Кароч, надо будет попробовать нарисовать что-нибудь на форме, а не пустое окно, может не столько оно и памяти жрёт.

xterro ★★★★★
() автор топика
Ответ на: комментарий от xterro

пустое окно жрёт 75 Мб + время от времени запускается ещё 1-2 процесса dotnet

ждать надо. когда-нибудь они же нажрутся наконец, и тут выходишь ты со своим окном, весь в белом.

alysnix ★★★
()
Ответ на: комментарий от lovesan

на винде, в случае с более-менее серьезными приложениями, обычно распространяют –self-contained приложения. т.е. рантайм упакован в директорию к проекту

Не только на винде. Сборки IDEA для линуксов и макоси так же сделаны. И это правильно ИМХО.

Тут встает другой вопрос: вот сделал ты утилитку на пару сотен строк. Полезную, все дела. Весит бинарник меньше метра, допустим. И вот ты вместе с ним укладываешь еще полгига дерьма рантайма.

Zhbert ★★★★★
()
Последнее исправление: Zhbert (всего исправлений: 1)
Ответ на: комментарий от Zhbert

полгига

Self-contained сборка дотнет приложения это где-то 60мб в дефолтном варианте. Если включить trim, то 10-15.

Это если не притягивать какие-то доп зависимости - они обычно не очень большие, но есть и такие (mailkit/mimekit в частности).

В целом, если это РЕАЛЬНО проблема, то скорее всего ты выбрал не тот инструмент для решения задачи.

Midael ★★★★★
()
Ответ на: комментарий от xterro

каждый их которых жрёт ещё столько же

Ты уверен, что правильно пони_маешь как интерпретировать показатели потребления памяти? Через htop смотришь? Он там будет потоки отображать отдельными строками. У них общее адресное пространство в рамках процесса. И никакого «ещё столько же» не будет.

ox55ff ★★★★★
()
Ответ на: комментарий от ox55ff

Запускаю на .net 8.0, семерки у меня нету. Если смотреть через htop то картина ещё занятнее, как это интерпретировать? atest это моя собранная приложуха(фильтранул по имени), это каждый занимает столько или всё вместе? https://add.pics/YTY90e При этом, через системный менеджер картина попроще, есть только 1 процесс, при этом памяти он стал занимать меньше… почему-то, кому/чему верить? :
https://add.pics/YTYNnL

xterro ★★★★★
() автор топика
Последнее исправление: xterro (всего исправлений: 1)