sqliteとAndroid2.3.7で深刻なパフォーマンスの問題が発生しています。
保存するデータが少量あります。それぞれ8列の14行です。データはWebページから読み取られます。データが解析されると、データベースのコンテンツ全体を削除してから、新しいデータを一度に一括挿入します。
一部の(編集された)LogCat出力:
03-15 14:39:51.909: Got content downloaded.
03-15 14:39:52.299: Deleting existing info from db.
03-15 14:39:52.719: Bulk inserting new data into db.
03-15 14:40:00.709: Stored data in the database.
ContentProviderを使用してデータベースにアクセスしています。
ページの解析には0.4秒かかります。
削除には0.4秒かかります。
BulkInsertには8秒かかります。
その後のクエリとすべてのデータの読み取りには、約0.4秒かかります。
関連するコードスニペット:
Log.v(TAG, "Deleting existing info from db.");
delete(API_TABLE, null, null);
Log.v(TAG, "Bulk inserting new data into db.");
bulkinsert(API_TABLE, allValues);
Log.v(TAG, "Stored data in the database.");
フィールドおよびタイプデータ:
public final static String[] API_KEYS = {KEY_STATION, KEY_API,
KEY_POLLUTANT, KEY_SO2, KEY_NOX, KEY_CO, KEY_PHOTO, KEY_TSPRSP,
KEY_RSP};
public final static String[] API_TYPES = {"TEXT PRIMARY KEY", "TEXT",
"TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT", "TEXT"};
データベースの構築は次のように行われます。
StringBuilder dbCommand = new StringBuilder();
dbCommand.append("CREATE TABLE " + API_TABLE + " (");
dbCommand.append("'" + API_KEYS[0] + "' " + API_TYPES[0]);
for (Integer i = 1; i < API_KEYS.length; i++)
dbCommand.append(", '" + API_KEYS[i] + "' " + API_TYPES[i]);
dbCommand.append(");");
Log.v(TAG, "Creating API database now.");
db.execSQL(dbCommand.toString());
挿入する値はContentValues[]オブジェクトに保存され、を使用して挿入されます
context.getContentResolver().bulkInsert(API_URI, values);
これを改善する方法について何かアイデアはありますか?特に、挿入には時間がかかりすぎます。