Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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

Open
myth384 opened this issue Mar 7, 2024 · 10 comments
Labels

Comments

@myth384
Copy link

myth384 commented Mar 7, 2024

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>
  1. Reference the WPF Class Library from the class with the axaml files.
  2. 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 myth384 added the bug label Mar 7, 2024
@myth384
Copy link
Author

myth384 commented Mar 24, 2024

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
Copy link
Member

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
Copy link
Author

myth384 commented Mar 25, 2024

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
Copy link

DevExpress has no Avalonia controls

@myth384
Copy link
Author

myth384 commented Mar 25, 2024

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
Copy link
Member

That's a 2GB of ModuleDefMD from dnLib

image

@maxkatz6
Copy link
Member

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
Copy link
Author

myth384 commented Mar 26, 2024

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
Copy link
Member

@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
Copy link
Author

myth384 commented Mar 27, 2024

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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants