当SQLLite使用Phonegap和良好的动态性插入超过3000条记录时,iOS应用程序崩溃
我在iOS中使用具有“良好动态”的Phonegap(Cordova)。 我们有一个15列的表,需要根据条件一次插入10000到200000多条记录 但我的应用程序在iPAD上测试超过2000条记录时崩溃了 我尝试了两种不同的批量插入,如下链接所示 (使用UNION ALL和逗号分隔的插入)当SQLLite使用Phonegap和良好的动态性插入超过3000条记录时,iOS应用程序崩溃,ios,sqlite,cordova,web-sql,good-dynamics,Ios,Sqlite,Cordova,Web Sql,Good Dynamics,我在iOS中使用具有“良好动态”的Phonegap(Cordova)。 我们有一个15列的表,需要根据条件一次插入10000到200000多条记录 但我的应用程序在iPAD上测试超过2000条记录时崩溃了 我尝试了两种不同的批量插入,如下链接所示 (使用UNION ALL和逗号分隔的插入) 我还尝试了两种选择: 1) 为每个插入打开一个事务 2) 使用for循环在单个事务中多次插入 在iOS模拟器中测试时,插入超过5000k的记录时,两个仪器都占用了1GB以上的内存(我怀疑这是导致问题的原因)
我还尝试了两种选择: 1) 为每个插入打开一个事务 2) 使用for循环在单个事务中多次插入 在iOS模拟器中测试时,插入超过5000k的记录时,两个仪器都占用了1GB以上的内存(我怀疑这是导致问题的原因) 当表中有更多列而没有出现任何问题时,IOS+SQLlite+PhoneGap+Good Dynamics 我使用的示例代码:
for(var j=0;j< bulkTransactions.length;j++){
(function(item,count){
db.transaction(function(tx){
if(item){
var insQuery= item;
tx.executeSql(insQuery, [],
function(tx,results){ //Success
if(count == bulkTransactions.length-1) {
if(callBackMethod != null)callBackMethod();
}
},
function(tx,e){
//Handle Error
}
);
}
});
}) (bulkTransactions[j],j);
}
for(var j=0;j
该应用程序在iOS模拟器(甚至显示1GB内存使用)或Chrome浏览器中运行良好,下图显示iOS模拟器中12000条记录的内存使用情况:
是的,即使我在插入20000多条记录时也遇到了同样的问题。但我已经通过分割100条记录来实现,这样就不会消耗更多的内存,显然这需要相同的时间。您所需要做的就是在后台确保主UI线程在进程完成之前未被阻止(或)设置加载程序。在我的情况下,插入10000只需要15秒。你有什么样的代码可以分享吗?你们是如何在Background开始这一过程的,按照穆罕默德·伊姆兰(Mohammed Imran)在上面的建议,每1000条记录延迟一次,现在一切正常,很高兴我的回答对你们有所帮助:)