改进InsertAllOnSubmit性能

时间:2012-06-23 17:47:08

标签: c# performance linq sql-server-ce windows-phone-7.1

我目前正在开展一个小项目来学习Linq,我想在台式机上为Windows Phone应用程序创建一个大型SDF数据库。我想要创建的应用程序采用带有制表符分隔条目的文本文件,并应将它们插入SDF文件中。文件中有大约900000行。目前我正在以这种方式插入它们:

                ConcurrentBag<Entry> data = new ConcurrentBag<Entry>();

                Parallel.ForEach<DictCCParser.Entry>(entries, e =>
                    {
                        Entry entry = new Entry { LanguageOne = e.Lang1, LanguageTwo = e.Lang2, GroupId = groupIds[e.Group] };
                        data.Add(entry);
                    });

                Console.WriteLine("Inserting data");

                db.Entries.InsertAllOnSubmit(data);
                db.SubmitChanges();

问题是,LINQ似乎创建了900000个单独的INSERT INTO语句。我已经读过可以使用批量插入,但是我所提到的每个实现都需要一个SQLCE 4.0文件。我试图创建一个包含所有插入内容的巨大查询,如

             INSERT INTO Entries(LanguageOne, LanguageTwo, Group) VALUES (...),(...),(...)

但显然SqlCE不适用于多个插入。有没有办法加速这段代码?

1 个答案:

答案 0 :(得分:0)

您可以使用我的SqlCeBulkCopy库,对于Windows Phone,数据库必须是3.5格式 - http://sqlcebulkcopy.codeplex.com