De prestaties van InsertAllOn verbeteren

Ik ben momenteel bezig met een klein project om Linq te leren, waar ik een grote SDF-database wil maken voor een Windows Phone-toepassing op mijn desktopcomputer. De applicatie die ik wil maken neemt een tekstbestand met tab-gescheiden invoer en moet deze in het SDF-bestand invoegen. Er zijn ongeveer 900000 regels in het bestand. Momenteel voeg ik ze op deze manier in:

                ConcurrentBag data = new ConcurrentBag();

                Parallel.ForEach(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();

Het probleem is dat LINQ 900000 afzonderlijke INSERT INTO-instructies lijkt te creëren. Ik heb gelezen dat het mogelijk is om bulk-invoegtoepassingen te gebruiken, maar elke implementatie waarvoor ik een cam wilde gebruiken, had een SQLCE 4.0-bestand nodig. Ik heb geprobeerd een grote query te maken die alle inserties bevat

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

Maar blijkbaar werkt SqlCE niet met meerdere inserts. Is er een manier om deze code te versnellen?

0

1 antwoord

You can use my SqlCeBulkCopy library, for Windows Phone the database MUST be 3.5 format - http://sqlcebulkcopy.codeplex.com

0
toegevoegd
De database-ID gemaakt met DataContext.CreateDatabase (). Ik heb al geprobeerd je bibliotheek te gebruiken, maar het gooide een sqlceinvaliddatabaseformatexception. Is er een manier om het formaat te controleren? In principe is de DB gemaakt vergelijkbaar met deze tutorial msdn.microsoft. nl/nl/us/library/hh202876 (v = vs.92) maar met een desktop-applicatie.
toegevoegd de auteur ChrisK, de bron
Ik heb naar de verkeerde vergadering verwezen. Nu werkt het.
toegevoegd de auteur ChrisK, de bron