测试手机: Honor 6A
手机生产日期:2017年05月25日
操作\数据量 | 100W | 200W | 300W |
---|---|---|---|
for循环插入 | 146秒 | 292秒 | 457秒 |
插入数据在最后面 | 12毫秒 | 14毫秒 | 16毫秒 |
查询数据,where customName = ? | 662毫秒 | 1253毫秒 | 1858毫秒 |
update数据(故意更新最后一条) | 654毫秒 | 1320毫秒 | 1869毫秒 |
根据条件删除数据(故意查最后一条) | 683毫秒 | 1259毫秒 | 3630毫秒 |
like customName = ? | 1257毫秒 | 2371毫秒 | 3632毫秒 |
查询主键 where _id = ? | 10毫秒 | 13毫秒 | 16毫秒 |
索引查询 where messageUId = ? | 750毫秒 | 1161毫秒 | 1591毫秒 |
order by randumNumber asc | 11毫秒 | 11毫秒 | 17毫秒 |
多线程测试
前置条件:同一进程,2个线程,同一个SQLiteDatabase,同一个WritableDatabase()
- 执行方式:A线程insert(开启事务操作),B线程select
能正常执行,但是会得到一串警告,测试的insert数量为10W条数据,select数量为3条数据。如果insert数量为1W条数据,就没有这样的警告
com.gxx.testdbapplication W/SQLiteConnectionPool: The connection pool for database '/data/user/0/com.gxx.testdbapplication/databases/myTest.db' has been unable to grant a connection to thread 478 (Thread-3) with flags 0x1 for 30.000002 seconds.
Connections: 1 active, 0 idle, 0 available.
可能您想在之前没有结束事务的事务上使用的表上选择查询。尝试在 finally 事务块上执行 endTransaction()。
或者
您正在更新两个表,两个不同的事务持有不同的表,等待另一个释放。
或者
只是有太多打开的连接,数据库或连接池就会变得混乱。 不管是什么,上面的内容可能是错误的。
-
执行方式:A线程insert(开启事务操作),B线程update
遇到的问题同上 -
执行方式:A线程update(开启事务操作1000条),B线程update(开启事务操作1000条),执行update的id都是不同
正常执行 -
执行方式:A线程update(开启事务操作1000条),B线程update(开启事务操作1000条),都不加锁,相同表,执行不同方法,传递相同ids
没有发现什么异常信息,但是会出现B线程没有更新到字段信息的情况 -
执行方式:A线程update(开启事务操作1000条),B线程update(开启事务操作1000条),都加锁,相同表,执行不同方法,传递相同ids
遇到的问题同上 -
执行方式:A线程update(开启事务操作1000条),B线程update(开启事务操作1000条),加锁,相同表,相同方法,传递相同ids
A线程执行的更新,会被B线程给替换掉
多进程测试
前置条件:2个进程,A进程只查询,B进程进行分别insert,update,select
-
执行方式:A进程select,测试select数量为18条,B进程insert,测试的insert数量为10W条数据
能正常执行,未发现异常 -
执行方式:A进程select,测试select数量为18条,B进程update,测试的update数量为18条数据
能正常执行,未发现异常 -
执行方式:A进程select,测试select数量为18条,B进程select,测试的update数量为18条数据
能正常执行,未发现异常
网友评论