0

allFeedsシリアル化されたデータを読み取るArrayListとメソッドがあります。

@SuppressWarnings("unchecked")
public void loadFile() {

    final String FILENAME = "feeds.ser";
    File file = fileContext.getApplicationContext().getFileStreamPath(FILENAME);

    try {           
        FileInputStream fis = new FileInputStream(file);
        ObjectInputStream ois = new ObjectInputStream(fis);
        allFeeds = (ArrayList<Feed>) ois.readObject();
    }
    catch (FileNotFoundException e) {
        e.printStackTrace();
    }
    catch (IOException e) {
        e.printStackTrace();
    }
    catch (ClassNotFoundException e) {
        e.printStackTrace();
    }
} 

シリアル化されたデータは、33 個の Feed オブジェクトで構成される 0.49 MB サイズのファイルに保存されます。Feed オブジェクトの構造は次のとおりです。HashMap は最大 900 個のキー ペア値を保持します。

int id;
String name;
int datatype; 
String tag;
Long time;
Double value;
String dpInterval;  
HashMap<Long, Double> historicFeedData;

データを arraylist に再度ロードするには、かなりの時間がかかります (平均時間は 13.5 秒です)。GC_CONCURRENT は、実行中に繰り返しメモリを解放します。

この操作の速度を上げる方法はありますか、それとも処理するデータの量だけですか? もしそうなら、これを aSyncTask またはバックグラウンド サービスにプッシュすることをお勧めしますか?

4

2 に答える 2

1

inputReader をバッファリングします。75% 節約する必要があります。

于 2013-09-09T18:09:30.860 に答える