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?
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
Peu importe, j'ai référencé le mauvais assemblage. Maintenant ça marche. – ChrisK