【问题标题】:Detecting low memory situations in .NET/Mono on mobile devices在移动设备上检测 .NET/Mono 中的低内存情况
【发布时间】:2014-07-10 22:18:04
【问题描述】:

我的 .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
}

这有增加垃圾收集频率的缺点。有没有更好的办法?

非解决方案:

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

【问题讨论】:

标签: c# .net memory mobile mono


【解决方案1】:

当您的内存不足时,iOS 将在您的 UIViewController 子类上调用 DidReceiveMemoryWarning(),从而释放资源。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-30
    相关资源
    最近更新 更多