我有一个 Mono for Android 应用程序,它使用 .NET XmlDocument类读取 XML 文件。每个文档大约 180K。
在解析每个文档并创建自己的内部数据结构后,我没有留下对XmlDocument实例的引用,因此它可以进行垃圾回收。
但是,问题是,在该集合发生之前需要 5-6 秒,如果我在 5-6 秒内加载多个文档,我的应用程序会崩溃到操作系统,没有打印错误消息,也没有抛出异常等。它只是说线程 12 已退出(我没有创建任何额外的线程,所以我也不明白为什么它是线程 12——XmlDocument 的线程?)。
如果我加载文档 1,然后等待 5 秒,然后加载文档 2,等待 5 秒然后加载文档 3,等等,那么一切正常。
在这种情况下,在 5 秒的等待期间,我可以看到 GC 启动了几次,并在 4-5 个周期内总共释放了大约 1MB 的内存(一些标记为 EXPLICIT,一些标记为 CONCURRENT)。
一旦按照我找到的一篇文章的建议完成后,我还尝试添加对 xmlDocument.RemoveAll() 的调用。之后我还添加了对 GC.Collect() 的调用。它略有帮助,但它仍然崩溃,只是不太频繁。
知道如何增加可用内存或让XmlDocument表现得更好吗?