gpt4 book ai didi

c# - 在 xaml 窗口上调用 ShowDialog 时,如何防止调用垃圾回收?

转载 作者:太空宇宙 更新时间:2023-11-03 21:50:57 30 4
gpt4 key购买 nike

我有一个使用大量内存的应用程序,但现在我无法改变这个事实。我的问题是我想执行一个操作并提供一个进度对话框,但显示 xaml 进度窗口似乎导致 GC.Collect 被调用 10 次!有什么想法可以优化打开我的进度窗口吗?

根据我的 Ants Profiler,导致 GC.Collect 的调用是

System.Window.ShowDialog() ->
..
..
System.Windows.Media.Imaging.BitmapSource.CreateCachedBitmap ->
SafeMILHandle.UpdateEstimatedSize ->
SafeMILHandleMemoryPressure.ctor ->
MemoryPressure.Add ->
MemoryPressure.ProcessAdd ->
GC.Collect

最佳答案

还有一个解决方案可以完全禁用与位图图像相关的内存压力和随后的垃圾收集。这更像是一个 hack,但您可以阅读类似的问题 here .

typeof(BitmapImage).Assembly.GetType("MS.Internal.MemoryPressure").GetField("_totalMemory", BindingFlags.NonPublic | BindingFlags.Static).SetValue(null, Int64.MinValue / 2); 

这样您就可以避免搜索所有代码来查找和修改 WPF 图标初始化。最重要的是,无论您如何初始化,System.Windows.Forms.Integration.ElementHost 等一些控件都会隐式添加与位图相关的内存压力。

关于c# - 在 xaml 窗口上调用 ShowDialog 时,如何防止调用垃圾回收?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14586975/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com