Xamarin android内存消耗在使用达到一定阈值后无限增长

Xamarin android内存消耗在使用达到一定阈值后无限增长,第1张

概述我有一个Xamarin android应用程序,似乎当应用程序的内存使用量达到140mb到160mb的某个阈值时,应用程序将迅速开始占用更多内存,就像在无限循环中一样.我可以在调试器输出中看到垃圾收集器不断尝试释放内存,但它似乎不起作用.内存使用率似乎无限制地增长.在我决定杀死应用程序之前,我看到它已经超过500mb的内存.我永远不会得到一个内存异常,这真的很奇怪.从我可以看出,没有特定的代码片段 我有一个Xamarin android应用程序,似乎当应用程序的内存使用量达到140mb到160mb的某个阈值时,应用程序将迅速开始占用更多内存,就像在无限循环中一样.我可以在调试器输出中看到垃圾收集器不断尝试释放内存,但它似乎不起作用.内存使用率似乎无限制地增长.在我决定杀死应用程序之前,我看到它已经超过500mb的内存.我永远不会得到一个内存异常,这真的很奇怪.从我可以看出,没有特定的代码片段,这可能发生在我可以在各种屏幕上,同样的事情会发生.我已经在多个设备上进行了测试,因此我知道它不仅仅是我设备的问题.我会尝试显示一些代码,但我没有任何罪魁祸首.

在我的应用程序中使用的可能导致问题的组件包括ReshSharp客户端,.net WebclIEnts,使用位图,带有3个选项卡的TabHost,位置管理器以及通过摄像头拍摄照片.我很难受到这一点的任何帮助,非常感谢.

编辑:
我可能已经缩小了其中一个问题的范围.我在一个tabhost里面有一个摄像机活动来拍照,我有一个照片拍摄方法,在拍摄照片后调用,拍完几张照片后问题就出现了.这是方法

public voID OnPictureTaken(byte[] data,global::AndroID.HarDWare.Camera c)    {        GC.Collect();        Bitmap b = BitmapExtensions.DecodeBitmapFromArray(data,WIDTH,HEIGHT);        Matrix matrix = new Matrix();        matrix.SetRotate(Rotationdegrees,WIDTH / 2f,HEIGHT / 2f);        var bitmapScalled = Bitmap.CreateBitmap(b,HEIGHT,matrix,true);        var d = global::AndroID.OS.Environment.ExternalStorageDirectory.Path + "/MyApp/";        if (!Directory.Exists(d))            Directory.CreateDirectory(d);        file = d + GuID.NewGuID().ToString() + ".jpg";        System.IO.StreamWriter sw = new System.IO.StreamWriter(file);        bitmapScalled.Compress(Bitmap.CompressFormat.Jpeg,70,sw.BaseStream);        sw.Close();        global::AndroID.Locations.Location location = CameraLocationManager.GetLastKNownLocation(CameraLocationManager.GetBestProvIDer(new Criteria() { Accuracy = Accuracy.Fine },true));        Intent intent = new Intent(this,typeof(EditPhotoActivity));        intent.PutExtra("LastKNownLocation",JsonConvert.SerializeObject(LastKNownLocation));        intent.PutExtra("filename",file);        //StartActivity(intent);        StartCamera(); // restart camera prevIEw        b.Recycle();        b = null;        sw.dispose();        bitmapScalled.dispose();        bitmapScalled = null;        // clean up        GC.Collect();    }
解决方法 虽然Xamarin剖析器仍在预览中,但它帮助我了解了我们在应用程序中遇到的内存问题.阅读你的最后评论我可以确认Xamarin Insights(v1.10.1)有一个巨大的内存签名(甚至可能泄漏).在我们从代码中删除它之后 – 该应用程序表现得非常快!

底线 – 使用分析器识别内存问题,如果您的应用中使用了Xamarin Insights,我建议将其删除,直至另行通知为止.

总结

以上是内存溢出为你收集整理的Xamarin android内存消耗在使用达到一定阈值后无限增长全部内容,希望文章能够帮你解决Xamarin android内存消耗在使用达到一定阈值后无限增长所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1127736.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-30
下一篇 2022-05-30

发表评论

登录后才能评论

评论列表(0条)

保存