我的.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:
答案 0 :(得分:3)
当你的内存不足时,iOS会在你的UIViewController子类上调用DidReceiveMemoryWarning()
,允许你释放资源。
Android会在您的Activity子类上调用OnLowMemory()
。
我不确定Windows Phone上的等价物是什么,但如果他们有类似的东西我也不会感到惊讶。