C# UIViewController未被释放
我注意到我用Xamarin iOS 7.2.2编写的大型应用程序间歇性崩溃。Instruments告诉我,我的应用程序在内存使用量上有所增长,但没有真正下降 我已确保取消UIViewController中的所有事件,尽管如此,我的UIViewController不会被处置 我知道它们不会被处理,因为它们上的断点永远不会执行 示例性处置方法:C# UIViewController未被释放,c#,memory-leaks,xamarin.ios,xamarin,lifecycle,C#,Memory Leaks,Xamarin.ios,Xamarin,Lifecycle,我注意到我用Xamarin iOS 7.2.2编写的大型应用程序间歇性崩溃。Instruments告诉我,我的应用程序在内存使用量上有所增长,但没有真正下降 我已确保取消UIViewController中的所有事件,尽管如此,我的UIViewController不会被处置 我知道它们不会被处理,因为它们上的断点永远不会执行 示例性处置方法: protected override void Dispose(bool disposing) { _someViewControl
protected override void Dispose(bool disposing) {
_someViewController = null;
_otherView = null;
ReleaseDesignerOutlets();
base.Dispose(disposing);
}
我并没有做任何花哨的事情,除了取消对其他视图的引用和发布designer Outlet,但它从未被调用
为什么在从导航控制器弹出“我的视图控制器”后不调用Dispose?可能有某个对象仍保留对视图控制器的引用 在某些情况下,很难确定引用的内容。由于您使用的版本比您应该尝试的GC(Bohem或sgen)的新Refcount扩展版本更新
来自的信息(和链接)更多,但简而言之,此扩展将更好地跟踪本机对象生存期,并且它还删除了大多数支持字段(可能包含此类引用) 以下模式有助于最小化内存泄漏
Xamarin应该认真研究这一点,复杂应用程序会出现间歇性崩溃和内存泄漏 Refcount没有任何区别。那么引用可能由您自己的代码保存(不是备份字段或被其他东西延迟)。您可以使用HeapShot查找保存此引用的内容和/或提交错误报告@在这种情况下,请随说明附上您的代码或子集(复制它)。感谢您提供的提示,尽管在Google上搜索了很长一段时间,但仍不知道HeapShot。不幸的是,应用程序在monotouch_release_managed_ref进行可靠测试时会间歇性崩溃。这些崩溃似乎是在连接到调试器时发生的。使用工具,我成功地确认了内存释放,但我必须在任何地方尽可能多地手动处理视图,并在任何可能的地方手动清空事件处理程序和引用。似乎有些奏效了。我最大限度地利用c#闭包,一种可能导致复杂对象引用图的非方法/类型。升级后我也遇到了类似的问题
Mono.Data.Sqlite.SqliteConnection.SetConfig(Mono.Data.Sqlite.SQLiteConfig.Serialized);