我正在Windows Mobile 5上开发一个应用程序,其中部分应用程序从IEnumerable中加载了大量数据(2000多个)。目前,我正在检查ID是否存在于数据库中,并且根据结果,我正在执行Insert或Update语句(使用SqlCeCommand的ExecuteNonQuery方法)。到目前为止,它的性能还不错,但是我想知道是否有更快/更好的方法可以提高性能。我看过某种批量插入,但是据我了解,这仅适用于插入。我的IEnumerable 中的某些项目很有可能已经存在于数据库中,如果存在,则需要更新。因此,批量复制/插入不会这样做-是吗?任何答案表示赞赏。非常感谢,ETFairfax。编辑:这是我最终得到的代码。性能提升是惊人的。我花了30秒保存1000条记录,转瞬之间就消失了。随时提出进一步的改进建议。public void MergeData(IEnumerable<T> entities) { using (var cmd = GlobalConnection.Instance.Connection.CreateCommand()) { cmd.CommandType = CommandType.TableDirect; cmd.IndexName = "PK_" + this.TableName; cmd.CommandText = this.TableName; using (SqlCeResultSet sqlCeResultSet = cmd.ExecuteResultSet(ResultSetOptions.Updatable)) { foreach (var entityToSave in entities) { bool recordAlreadyExists = sqlCeResultSet.Seek(DbSeekOptions.FirstEqual, entityToSave.Id); if (recordAlreadyExists) { //Do an Update sqlCeResultSet.Read(); PopulateForUpdate(sqlCeResultSet, entityToSave); sqlCeResultSet.Update(); } else { //Do an Insert SqlCeUpdatableRecord insertRecord = sqlCeResultSet.CreateRecord(); PopulateForInsert(insertRecord, entityToSave); sqlCeResultSet.Insert(insertRecord); } } } } } (adsbygoogle = window.adsbygoogle || []).push({}); 最佳答案 如果仅击中一个表,使用TableDirect而不是查询处理器可能会使性能提高10倍。只需在ID索引上查找,如果该行存在,则更新,否则插入。使用SqlCeResultSet进行遍历。 (adsbygoogle = window.adsbygoogle || []).push({});
08-03 19:41