使用ContentResolver.applyBatch和ContentResolver.bulkInsert方法一次性添加数千个联系人非常慢。 Android是否提供了一种批量添加联系人的不同方式,这种方式会更快?
到目前为止,我尝试了以下方法:
使用applyBatch(每千个联系人约75秒)
对于每个联系人:
最后,使用ContentResolver.applyBatch来应用所有操作。
使用bulkInsert(每千个联系人约40秒)
对于每个联系人:
然后,使用ContentResolver.applyBatch应用所有操作。这将返回一个ContentProviderResults数组。
现在,对于每个联系人:
问题
答案 0 :(得分:0)
您展示的第一种方法是正确的方法,除了比第二种方法更快,它也更安全。
当您在同一批处理操作中同时插入Data
和for (CoreMap sentence : sentences)
{
List<MatchedExpression> matched = extractor.extractExpressions(sentence);
if (matched != null) {
matched = MatchedExpression.removeNested(matched);
matched = MatchedExpression.removeNullValues(matched);
System.out.print("FOR SENTENCE:" + sentence);
}
for(MatchedExpression phrase : matched){
// Print out matched text and value
System.out.print("MATCHED ENTITY: " + phrase.getText()+ "\t" + "VALUE: " + phrase.getValue());
时,如果在此过程中出现问题,数据库将回滚该批处理中的先前更改,因此您不会在任一表中留下任何 zombie 信息。
为了加快速度,请尝试在不同线程之间划分工作。
如果您有1000个联系人,请创建一个将处理前500名的线程,另一个处理底部500,然后同时运行。 如果需要,您可以将其应用于更多线程。