AvaloniaUI / AvaloniaVS

Visual Studio Extension for Avalonia
MIT License
412 stars 77 forks source link

High memory and CPU usage when (indirectly) referencing DevExpress libraries #451

Open myth384 opened 4 months ago

myth384 commented 4 months ago

Describe the bug

After referencing a WPF project with a few references to DevExpress libraries, Visual Studio 2022 encounters high CPU and memory usage when utilizing the XAML Previewer. This eventually leads to Visual Studio crashing due to memory overload. However, after unloading the Avalonia Extension, this issue no longer persists.

To Reproduce

  1. Create a new Avalonia project
  2. Open MainWindow.axaml and MainView.axaml
  3. Open the Windows TaskManager to observe Visual Studio metrics
  4. Add a WPF Class Library project
  5. Add these DevExpress references to the WPF project:
    <ItemGroup>
    <PackageReference Include="DevExpress.Images" Version="23.2.4" />
    <PackageReference Include="DevExpress.Win.Design" Version="23.2.4" />
    <PackageReference Include="DevExpress.Wpf" Version="23.2.4" />
    <PackageReference Include="DevExpress.Wpf.Core" Version="23.2.4" />
    <PackageReference Include="DevExpress.Wpf.Themes.All" Version="23.2.4" />
    <PackageReference Include="DevExpress.Wpf.ThemesLW" Version="23.2.4" />
    </ItemGroup>
  6. Reference the WPF Class Library from the class with the axaml files.
  7. Observe memory consuption and cpu usage

AvaloniaVS plugin version

11.5

Avalonia version

11.0.10

Visual Studio version

17.9.2

Relevant log output

No relevant information is shown.

Additional context

After closing the solution, high memory usage persists.

myth384 commented 4 months ago

I'm trying to convince our team for choosing AvaloniaUI to replace WinForms for modernising our Windows (only) applications. As we need to host several DevExpress WPF controls, this issue makes convincing the team quite the challenge... As I really think AvaloniaUI is our way forward, I'm eager to assist in fixing this issue in my spare time. If anyone could give me some pointers for how to perform a diagnosis of the extension while running, it would really help me out.

maxkatz6 commented 4 months ago

I don't think I can use these DevExpress packages without having their licensed nuget feed used.

Error   NU1101  Unable to find package DevExpress.Images. No packages exist with this id in source(s): C:\Program Files\dotnet\library-packs, Microsoft Visual Studio Offline Packages, nuget-feed-all.avaloniaui.net, nuget.org    WpfLibrary1 E:\Work\Projects\TrashBin\avavs\WpfLibrary1\WpfLibrary1.csproj  1       

Do you have another repro that can be used with public nugets?

myth384 commented 4 months ago

Hi Max, thanks for your response. I am currently testing against a 30 day trial license as we don't have a license for their WPF controls yet. Is registering for a trial license an option for you as well? After registering you'll get access to a unique public trial feed or you could install the packages locally through an installer: https://www.devexpress.com/products/try/

Gillibald commented 4 months ago

DevExpress has no Avalonia controls

myth384 commented 4 months ago

I understand that, we need to host some WPF DevExpress controls inside AvaloniaUI Windows. I should have explained that in my issue. Hosting a DevExpress control works perfectly fine when executing aan AvaloniaUI application. The problem is that just referencing the DevExpress libraries, without actually using it in my own code, is enough to observe the reported behaviour with the previewer..

maxkatz6 commented 4 months ago

That's a 2GB of ModuleDefMD from dnLib

image

maxkatz6 commented 4 months ago

After that PR plugin still consumers lots of memory and CPU while trying to process DevExpress libraries as potential metadata candidate for XAML competition. But at least it should free this memory after metadata was already collected (i.e. once per each opened project).

myth384 commented 4 months ago

I just gave the VSIX from the PR a try and I can confirm the fix is indeed a big improvement! I could not count for much support from my team with Visual Studio continuously crashing. Thanks a lot for your timely actions! Are you planning the resolve the memory and CPU consumption in a later fix?

maxkatz6 commented 4 months ago

@myth384 unfortunately, I am not able to spend much more time on improving AvaloniaVS performance, as I already checked low hanging fruits. Especially since it's pretty uncommon use case to use such heavy control libraries with Avalonia. You can contact our support team, if you want to make it a higher priority though.

About AvaloniaVS release cycle, we planned to do a release once 11.1 stable is ready. But I will see if we can do a minor release earlier. Either way - this vsix package should be available to download for a month at least, and if needed, I can trigger a new build.

myth384 commented 4 months ago

No worries at all, @maxkatz6, I understand it completely. Your low hanging fruit picking is much appreciated already! What important is, that a road block has been lifted for us. If we're indeed going to implement AvaloniaUI into our products, I will try my best to advocate supporting Avalonia.