2012-06-23 4 views
0

Je travaille actuellement sur un petit projet pour apprendre à Linq où je veux créer une grande base de données SDF pour une application Windows Phone sur mon ordinateur de bureau. L'application que je veux créer prend un fichier texte avec des entrées délimitées par des tabulations et doit les insérer dans le fichier SDF. Il y a environ 900 000 lignes dans le fichier. Actuellement, je suis en les insérant ainsi:Amélioration des performances d'InsertAllOnSubmit

   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(); 

Le problème est que LINQ semble créer 900000 INSERT INTO séparée. J'ai lu qu'il est possible d'utiliser l'insertion en bloc, cependant chaque implémentation que j'ai besoin d'un fichier SQLCE 4.0. J'ai essayé de créer une énorme requête contenant tous les inserts comme

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

Mais apparemment SQLCE ne fonctionne pas avec de multiples inserts. Existe-t-il un moyen d'accélérer ce code?

Répondre

0

Vous pouvez utiliser ma bibliothèque SqlCeBulkCopy, pour Windows Phone la base de données DOIT être 3.5 Format - http://sqlcebulkcopy.codeplex.com

+0

L'ID de base de données créée par DataContext.CreateDatabase(). J'ai déjà essayé d'utiliser votre bibliothèque mais elle a jeté une sqlceinvaliddatabaseformatexception. Y a-t-il un moyen de vérifier le format? Fondamentalement la base de données est créée semblable à ce tutoriel http://msdn.microsoft.com/en-us/library/hh202876(v=vs.92) mais avec une application de bureau. – ChrisK

+0

Peu importe, j'ai référencé le mauvais assemblage. Maintenant ça marche. – ChrisK

Questions connexes