Awesomium.NET 在调整大小时崩溃 - 内存泄漏

Posted

技术标签:

【中文标题】Awesomium.NET 在调整大小时崩溃 - 内存泄漏【英文标题】:Awesomium.NET Crashing on Resize - Memory Leak 【发布时间】:2016-02-25 00:23:27 【问题描述】:

嗯,我注意到了一个奇怪的错误。这发生在调整大小时。

我在尝试修复我的 xaml 对齐时首先注意到它。当我尝试 在我的 2 个屏幕上调整窗口大小,令人敬畏的内容开始闪烁,突然内容消失,出现带有徽标的红屏,在 vshost32.exe 之后不久 坠毁。

我想得很好.. 好吧,它可能有一些宽度限制,所以我将窗口的 MaxWidth 限制在主屏幕的宽度上。我在尝试水平调整大小时也注意到了一些闪烁,但仅此而已,但是当我向调整大小发送垃圾邮件并多次更改高度和宽度时,在 maxheight 1080 和 max width 1920 上出现了相同的问题。

Edit2 附加信息: 我在同一个 XAML 上有 2 个 WebControl。 当我添加多个并调整大小时... 第一秒就崩溃了。

编辑 (1)

[1123/013232:INFO:(0)] WebCore is now online.
[1123/013232:INFO:(0)] Running Awesomium 1.7.5.1
[1123/013247:WARNING:Awesomium.NET(0)] System.OutOfMemoryException: Insufficient memory to continue the execution of the program.
   at System.Windows.Media.Imaging.WriteableBitmap..ctor(Int32 pixelWidth, Int32 pixelHeight, Double dpiX, Double dpiY, PixelFormat pixelFormat, BitmapPalette palette)
   at Awesomium.Windows.Controls.WebViewPresenter.Awesomium.Core.ISurface.Initialize(IWebView view, Int32 width, Int32 height)
   at Awesomium.Core.Surface.oQVs2ZKQlyYpFHm4aaM(Object , Object , Int32 width, Int32 height)
   at Awesomium.Core.Surface.InitializeDirector(IWebView view, Int32 width, Int32 height)
   at Awesomium.Core.Surface..ctor(IWebView view, Int32 width, Int32 height, ISurface surfaceImpl)
   at Awesomium.Core.SurfaceFactory.Nu5RdsobJP(IntPtr  , Int32  , Int32  )
   at Awesomium.Core.NativeMethods.WebCore_Update(HandleRef jarg1)
   at Awesomium.Core.WebCore.UpdateThunk()
[1123/013247:ERROR:ipc_channel_win.cc(261)] pipe error: 109

在我看来,这里有一些内存泄漏。

在浪费了 2 GB 的 RAM 之后,它就会崩溃。

使用 8.5 GB 的 Ram 进行了尝试,升到 10.5 然后崩溃了。

我进行了一些测试以找出导致此错误的原因。 我创建了一个循环,它将每 50 毫秒以 2 个宽度和高度调整窗口的大小

 public async void testc() 
        for (int i = 0; i <= 1000; i++)
        
            this.Width = 1700 + i % 2;
            this.Height = 950 + i % 2;

            await Task.Delay(50);
        
    

正如预期的那样再次崩溃,但有趣的是,当我在循环中附加时

WebControl.Reload(true);

它实际上并没有崩溃...内存从 350 MB 上下波动

有没有办法在调整大小时阻止渲染?

【问题讨论】:

似乎是 Awesomium 中的一个错误。我会创建一个非常小的示例来重现问题并将其提交给他们的错误跟踪器。 Awesomium 似乎已经被废弃一年了。 answers.awesomium.com 的社区似乎充满活力。我会尝试在那里发帖。看起来像是旧版本的 Stack Overflow 引擎。 我已经发过了,没有回复 你可能想把它链接到这里.. 【参考方案1】:

认为只有在控件完全初始化并显示后才能调整大小。恕我直言位图

 at System.Windows.Media.Imaging.WriteableBitmap..ctor(Int32 pixelWidth, Int32 pixelHeight, Double dpiX, Double dpiY, PixelFormat pixelFormat, BitmapPalette palette)

大小为零或无效。

我以前用过 Awesomium,我的建议是迁移到 CefSharp

https://cefsharp.github.io/

【讨论】:

说实话,在遇到 Awesomium 的几个问题后,我在 2 天前迁移到了 CefSharp。而且我现在很开心。我认为 cefsharp 会更重,但它似乎加载得很好,并且比这个废弃的项目更优化。无论如何,感谢您的宝贵时间。 有趣。在 4k 屏幕上调整大小时,cefsharp 也会发生这种情况。

以上是关于Awesomium.NET 在调整大小时崩溃 - 内存泄漏的主要内容,如果未能解决你的问题,请参考以下文章

调整 OpenGL 窗口的大小会导致它崩溃

Python3 + Pillow + QT5:当我调整包含图像的标签大小时崩溃

具有自我调整大小的单元格的 UICollectionViewFlowLayout 在 reloadData 后崩溃

在 C++ 中动态调整数组的大小

自调整大小的集合视图在 iOS 15 中进入递归循环

编辑情节提要时 Xcode Interface Builder 崩溃