2012-04-24 23 views
3

您好,我在我的項目中使用MuPdf庫來查看文檔。問題是,當您在平板電腦上的11英寸活動中打開3-7份文檔時,我會發生內存溢出。加載新文檔時,對前一個文檔的所有引用都會被銷燬,但不會刪除內存中文檔的圖像。對象在10-12兆字節的內存映像中創建。 在平板電腦上7英寸的大小不會出現這個問題。MuPdf中的OutOfMemory

也許有人遇到這個問題?

+0

我也在尋找一個解決方案的relaeseBitmaps()方法對位圖調用recycle()解決。當我在不同的頁面打開和關閉pdf活動時,我收到了一個outofmemory錯誤。如果mupdf以低質量渲染沒有問題,但是當它在HQ中渲染時(主要是在平板電腦10.1的全屏頁面上以縱向模式顯示),它會溢出 – markov00 2012-05-13 22:45:40

+0

mupdf嘗試從存儲庫更新,我有一個問題消失。 – alezhka 2012-05-14 08:43:14

回答

0

裏面mupdf.c找到

「/ * 128 MB店低內存設備。必要時扭捏。* /」 和

變化的內存限制,並嘗試

我試着用512渲染速度比以前更快

+0

您無法通過這種方式修復內存泄漏! – prageeth 2014-07-07 08:22:00

0

我添加了下面的代碼來強制垃圾收集器在PageView.java中,它似乎迄今工作正常。

if (mEntireBm == null || mEntireBm.getWidth() != newSize.x 
           || mEntireBm.getHeight() != newSize.y) { 
      mEntireBm = Bitmap.createBitmap(mSize.x, mSize.y, Bitmap.Config.ARGB_8888); 
      System.gc();//Added 
      Runtime.getRuntime().gc();//Added 
     } 

編輯:崩潰後打開文件幾次

-1
  1. 編輯mupdf.c

變化: /* 128 MB店低內存設備。根據需要調整。 */ glo-> ctx = ctx = fz_new_context(NULL,NULL,128 < < 20); 至 /* 128 MB用於低存儲設備。根據需要調整。 */ glo-> ctx = ctx = fz_new_context(NULL,NULL,32 < < 20);

這就是全部。 最大堆內存量〜50Mb。

+0

您無法以這種方式修復內存泄漏。 – prageeth 2014-07-07 08:21:08

2

此問題是由PageView.java

public void releaseBitmaps() { 
     reinit(); 
     mEntireBm.recycle(); 
     mPatchBm.recycle(); 
     mEntireBm = null; 
     mPatchBm = null; 
    } 
+0

這解決了OutOfMemoryError後約10 PDF打開後獲得。感謝你! – prageeth 2014-07-07 07:02:22