【问题标题】:Getting OutOfMemoryException in Xamarin在 Xamarin 中获取 OutOfMemoryException
【发布时间】:2016-08-18 13:28:57
【问题描述】:

java.lang.OutOfMemoryError。考虑增加 $(JavaMaximumHeapSize)。 Java在执行时内存不足 'java.exe'

我的 visualstudio Xamarin 项目出现内存不足异常请帮助我如何解决此问题。

【问题讨论】:

  • 我不仅要建议将 LargeHeap 设置为 true。相反,您应该尝试找出导致 OOM 的原因并修复它。否则你可能会为你争取一些时间,直到它再次打击你。

标签: c# visual-studio xamarin xamarin.android


【解决方案1】:

我会增加你的构建堆大小。

右键单击您的 Android 项目 > 属性 > Android 选项 > 高级 > Java 最大堆大小

【讨论】:

  • 是的,你的权利。但是我在哪里可以在 Visual Studio xamarin 中增加我的应用程序大小。
  • @SrinivasCh 在您的清单中添加android:largeHeap="true"标签,然后查看您的logcat 以查看Grow heap (frag case) 以查看ART 何时尝试分配更多内存
  • 效果很好感谢@lain Smith 的回复
  • @SushiHangover 好吧,我之前遇到过这个错误,只是在这里增加了堆,但是如果你希望你必须使用一个大堆然后编辑清单,那么你是对的
  • @Srinivas-Ch 不用担心
【解决方案2】:

选择的答案引导我朝着正确的方向前进,但对于 Visual Studio 2017,屏幕如下所示:

【讨论】:

    【解决方案3】:

    如果您想增加应用程序的堆大小(而不是构建过程),您可以在 AndroidManifest.xml 中进行设置:

    <application android:largeHeap="true"></application>
    

    【讨论】:

      【解决方案4】:

      对于 Visual Studio 2015 右键单击​​项目 --> 属性 --> Android 选项 --> 高级和堆大小。

      【讨论】:

      • 使:左键单击.Droid --> 双击“属性”--> 点击左侧的“Android 选项”--> 点击“高级”选项卡--> “Java 最大堆大小”
      【解决方案5】:

      从 Xamarin Studio 6.3 版和 Visual Studio 7.0.1 开始,可以在此处找到增加堆大小的选项

      右击android项目然后选择options并选择,Build/Android Build,然后Advanced选项卡并在 Java 堆大小

      中设置 1G(或其他)

      【讨论】:

        【解决方案6】:

        当你用完 1G 堆大小时,开始优化资源。

        首先检查您是否没有复制图像实例,将同一图像多次保存在内存中。为此,使用 ffimageloading 库 (https://github.com/luberda-molinet/FFImageLoading) 在 nuget 上快速轻松地获取它。

        然后优化您正在使用的图像。对于除图标以外的大图像,请尝试将所有内容都转换为 jpeg,避免使用透明的 png,这曾经为我节省了不断的 ooms。

        然后,如果您可能在遥控器上上传了较大的图像,请尝试使用缩略图而不是图像。在您的服务器上预先创建不同尺寸的缩略图,mini、small、medium、normal、large、xlarge 等,并仅加载您真正需要的尺寸的图像。这样可以节省大量内存和速度。

        另一个是内存泄漏。如果单元格或其他元素没有取消订阅消息、事件处理程序和其他内容,则它们可能仍驻留在内存中。想象一下,当您确定不会发生这种情况时,您可以在内存中保留多个图像列表的副本。更多信息在这里:

        https://forums.xamarin.com/discussion/123876/should-we-unsubscribe-all-events-for-memory-management

        https://forums.xamarin.com/discussion/87206/messaging-center-unsubscribe-from-all-messages-when-broadcast-stops

        【讨论】:

          【解决方案7】:

          根据我的经验,内存问题仅发生在 Xamarin.Forms 应用的 android 版本上。而且它总是要处理大尺寸的图像。我已经通过使用 FFImageLoading(https://github.com/luberda-molinet/FFImageLoading)

          处理了这个问题

          更换你的

          <Image Source="waterfront.jpg" />
          

          <ffimageloading:CachedImage Source="waterfront.jpg"
          DownsampleToViewSize = true,
          BitmapOptimizations = true/>
          

          您将看到性能的显着提升,同时也解决了您的记忆问题。

          【讨论】:

            【解决方案8】:

            增加 java 最大堆大小对我有用

            【讨论】:

              【解决方案9】:

              我已修复在 AndroidManifyt.xml 的应用程序标记中添加以下内容

              <application  android:largeHeap="true" android:label="sample"></application>
              

              【讨论】:

                猜你喜欢
                • 2012-03-25
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 2016-09-16
                相关资源
                最近更新 更多