Xamarin.mac WKWebView留下2个孤立进程

Xamarin.mac WKWebView留下2个孤立进程,xamarin,wkwebview,xamarin.mac,Xamarin,Wkwebview,Xamarin.mac,我的应用程序是一个基于文档的Xamarin.mac应用程序,它使用WKWebView显示代码中生成的HTML内容。每次创建新窗口时,还将创建两个新进程:“应用程序名称网络”和“关于:”。但是,当窗口关闭时,这两个进程仍然存在。打开10个窗口,关闭10个窗口,我有20个孤立进程 有没有人知道如何在窗户关上的时候把这些东西拿走 (编辑) 请注意,这些不是孤立的对象/数据结构,而是独立运行的系统进程,由应用程序拥有,但不由生成它们的文档窗口/视图控制器拥有。退出应用程序,子进程将死亡。但是关闭窗口,子

我的应用程序是一个基于文档的Xamarin.mac应用程序,它使用WKWebView显示代码中生成的HTML内容。每次创建新窗口时,还将创建两个新进程:“应用程序名称网络”和“关于:”。但是,当窗口关闭时,这两个进程仍然存在。打开10个窗口,关闭10个窗口,我有20个孤立进程

有没有人知道如何在窗户关上的时候把这些东西拿走

(编辑)
请注意,这些不是孤立的对象/数据结构,而是独立运行的系统进程,由应用程序拥有,但不由生成它们的文档窗口/视图控制器拥有。退出应用程序,子进程将死亡。但是关闭窗口,子进程将继续运行…

.NET中的内存管理是基于垃圾收集的。因此,从应用程序或开发人员的角度来看,它是不确定的。这意味着,在.NET中,上述内容并非意外

在Xamarin中还有另外一个问题-Xamarin保留对本机资源的引用,但它不知道这些资源是什么以及它们占用了多少计算机资源,因此自动垃圾收集通常不会在您期望的时候发生

建议您处置不需要的重要本机资源。我肯定会在这种资源中考虑WKWebVIEW。


除此之外,您还可以手动启动垃圾收集,但除非真的需要,否则不建议这样做。

您可以维护本机引用。请确保使用Xamarin探查器释放所有返回
IDisposable
的本机对象,这将有助于跟踪这些对象。@sushingover我认为所有本机对象在Xamarin中都可以IDisposable。我构建了一个测试应用程序,它只是一个新版本基于文档的应用程序、文档空间中的WKWebView和名为“webView”的插座。构建并运行,每次打开窗口时,额外的进程都会在活动监视器中生成,但不会消失。以下是指向项目的链接:[App Source)@IvanIčin Yes?…在Xcode中创建出口时,Dispose会自动添加到ViewController.designer.cs文件中。我添加了GC.Collect()对于ViewDidDemouse方法和析构函数方法。没有影响。请注意,它们本身不是孤立对象或内存,甚至不是线程。这些是孤立的实际系统进程。@DesignDB Dispose不是自动添加的,因为它从未执行过。它也不是Dispose,而是与release d类似的东西据我记忆所及,esigner outlets。但无论哪种情况,除非您这样做,否则它都不会被调用。明白了。它是自动生成的,但我从未想到它也不会被自动调用。调用该函数似乎不会杀死子进程,无论它是在ViewWillEnglish、ViewDidEnglish还是在类destr中调用uctor.有没有一个“完美”的地方可以称之为它?@DesignDB我现在不能再检查任何东西了,但是如果你说的是真的(进程没有被终止)对你来说,最好的办法是建立一个XCode项目,看看问题是否出现。如果问题没有出现,那么就把它作为bug提交给Xamarin,如果它也出现在XCode中,那么它可能是苹果的bug,也可能是你不应该关心的事情。