在移动设备上检测.NET / Mono中的低内存情况

时间:2014-07-10 22:18:04

标签: c# .net memory mobile mono

我的.NET应用程序在Windows Phone,Android和iOS上运行(通过Mono)。

我正在寻找一种方法来在抛出OutOfMemory异常之前检测低内存情况(或者应用程序刚刚死亡,这通常发生在移动平台上)。

我的应用程序可以通过使用不同的代码路径立即减少内存使用量。不幸的是,我需要知道何时这样做 - 我需要知道在操作系统关闭之前内存很低。

我不是在寻找能够100%有效工作的银弹。任何可以减少内存不足崩溃频率的事情都是好的。

例如,以下内容是否有意义:

// Periodically (say once per a few seconds) execute the following:
try
{
    byte[] probe = new byte[1 * 1024 * 1024];
}
catch (OutOfMemoryException)
{
    // 1MB free block not found, choose low memory code path
}

这具有增加垃圾收集频率的缺点。还有更好的方法吗?

Nonsolutions:

  • .NET MemoryFailPoint类,遗憾的是它尚未在Mono中提供,因此不是一个选项。

1 个答案:

答案 0 :(得分:3)

当你的内存不足时,iOS会在你的UIViewController子类上调用DidReceiveMemoryWarning(),允许你释放资源。

Android会在您的Activity子类上调用OnLowMemory()

我不确定Windows Phone上的等价物是什么,但如果他们有类似的东西我也不会感到惊讶。