大佬教程收集整理的这篇文章主要介绍了Android中的外部存储上的SQLite性能不佳,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我在插入记录时看到了非常糟糕的表现.
我知道外部存储器可能很慢,但我想看到一些数字,所以我写了一个测试它的小应用程序.
这是代码:
public static final int INSERTS = 100; File dbFile = new File(Environment.getExternalStorageDirectory(),"test.sqlite3"); // File dbFile = new File(getFilesDir(),"test.sqlite3"); dbFile.delete(); sqliteDatabase db = sqliteDatabase.openOrCreateDatabase(dbFile,null); db.execsql("create table events (_id INTEGER PRIMary key autoincrement,event_type TEXT NOT NULL,timestamp BIGINT,data text);"); db.execsql("CREATE INDEX mainIndex ON events (event_type,timestamp ASC);"); InsertHelper Helper = new InsertHelper(db,"events"); final int eventTypeCol = Helper.getcolumnIndex("event_type"); final in@R_450_3056@Col = Helper.getcolumnIndex("timestamp"); final int dataCol = Helper.getcolumnIndex("data"); long start = System.currentTimeMillis(); String eventType = "foo",data = "bar"; long timestamp = 4711; for(int i = 0; i < INSERTS; ++i) { Helper.prepareForinsert(); Helper.bind(eventTypeCol,eventTypE); Helper.bind(timestampCol,timestamp); Helper.bind(dataCol,data); Helper.execute(); } long end = System.currentTimeMillis(); Log.i("Test",String.format("InsertHelper,Speed: %d ms,Records per second: %.2f",(int)(end-start),1000*(doublE)INSERTS/(doublE)(end-start))); db.close(); dbFile.delete(); db = sqliteDatabase.openOrCreateDatabase(dbFile,timestamp ASC);"); start = System.currentTimeMillis(); ContentValues cv = new ContentValues(); for(int i = 0; i < INSERTS; ++i) { cv.put("event_type",eventTypE); cv.put("timestamp",timestamp); cv.put("data",data); db.insert("events",null,cv); } end = System.currentTimeMillis(); Log.i("Test",String.format("Normal,end-start,1000*(doublE)INSERTS/(doublE)(end-start))); db.close(); dbFile.delete();
数据库与我的真实应用程序使用的数据库完全一样,我尝试删除索引,但它没有任何区别.
结果如下:
Nexus One,Internal memory Method | Records | Time (ms) | Records per second -------------+---------+-----------+-------------------- Normal | 100 | 2072 | 48.26 InsertHelper | 100 | 1662 | 60.17 Nexus One,External memory: Method | Records | Time (ms) | Records per second -------------+---------+-----------+-------------------- Normal | 100 | 7390 | 13.53 InsertHelper | 100 | 7152 | 13.98 Emulator,Internal memory: Method | Records | Time (ms) | Records per second -------------+---------+-----------+-------------------- Normal | 100 | 1803 | 55.46 InsertHelper | 100 | 3075 | 32.52 Emulator,External memory: Method | Records | Time (ms) | Records per second -------------+---------+-----------+-------------------- Normal | 100 | 5742 | 17.42 InsertHelper | 100 | 7164 | 13.96
正如您所看到的,模拟器不可信任,InsertHelper
应该更快.
当然,这是预期的,测试主要是出于好奇.
然而,让我担心的是当我使用外部存储器时手机性能不佳,我是否错过了SQLiteDatabase
的一些关键方面,还是只是为了让SD卡变慢?
db.begintransaction(); try { for(int i = 0; i < INSERTS; ++i) { Helper.prepareForinsert(); Helper.bind(eventTypeCol,eventTypE); Helper.bind(timestampCol,timestamp); Helper.bind(dataCol,data); Helper.execute(); } db.settransactionsuccessful(); } finally { db.endtransaction(); }
以上是大佬教程为你收集整理的Android中的外部存储上的SQLite性能不佳全部内容,希望文章能够帮你解决Android中的外部存储上的SQLite性能不佳所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。