使用LinqToDatasets缓慢更新/插入SQL Server CE

时间:2010-03-10 17:36:12

标签: linq windows-mobile compact-framework sql-server-ce linq-to-dataset

我有一个使用LinqToDatasets更新/插入SQL Server CE 3.5文件的移动应用程序。

我的代码如下:

// All the MyClass Updates
MyTableAdapter myTableAdapter = new MyTableAdapter();

foreach (MyClassToInsert myClass in updates.MyClassChanges)
{
    // Update the row if it is already there
    int result = myTableAdapter.Update(myClass.FirstColumn, 
                                       myClass.SecondColumn, 
                                       myClass.FirstColumn);
    // If the row was not there then insert it.
    if (result == 0)
    {
        myTableAdapter.Insert(myClass.FirstColumn, myClass.SecondColumn);
    }
}

此代码用于使手持数据库与服务器数据库保持同步。问题是,如果它是完整更新(例如第一次),则有很多更新(大约125)。这使得这个代码(和更多循环一样需要很长时间(我有三个这样的循环,每个循环超过30秒)。

是否有更快或更好的方式来执行此类更新/插入?

(我确实看到了这个Codeplex Project,但我看不出如何让它与更新和插入一起使用。)

1 个答案:

答案 0 :(得分:1)

您应始终使用SqlCeResultSet在移动设备上进行数据访问,以获得最佳性能和内存使用率。您必须标识要插入的数据,然后使用类似SqlCeBulkCopy示例的代码,并使用SqlCeResultSet的Seek和Update方法使用类似的代码。