2010-02-17 6 views
3

Quel est l'avantage de disposer d'un LINQ to SQL DataContext? Ou, y a-t-il un problème à ne pas disposer de ces objets DataContext?Quel est l'avantage de disposer d'un LINQ à SQL DataContext?

Par exemple, pour le codage facile, je pourrais vouloir faire quelque chose comme ...

var list = from p in (new MyDataContext()).People where p.LastName.Contains("sommar") select p; 

Dans ce cas, j'ai new'd une instance mais pas « fermée » ou aliénée de quelque manière que. Est-il toujours là-bas flottant avec le potentiel de me causer des problèmes? Pour remonter l'ante, mettons cela dans une boucle où on l'appelle 2000 fois. < italien: accent > Vous avez un problème avec ça? </italien: accent >

+0

Dupliquer: http://stackoverflow.com/questions/821574/c-linq-to-sql-should-datacontext-be-disposed-using-idisposable –

Répondre

2

Les contextes de données L2S n'ont pas besoin d'être fermés ou éliminés. Cependant, je ne pense pas que je voudrais faire ce que vous faites, en créant un nouveau 2000 fois en boucle. Un contexte de données est un objet lourd, un peu comme un SQLConnection sur les stéroïdes majeurs. Je ne voudrais pas l'overhead de la création de 2000 en boucle. OTOH, vous ne voulez pas qu'ils vivent trop longtemps non plus.

Nouveau, faites votre unité de travail, puis laissez le cadre s'en débarrasser, ou faites-le vous-même. Il n'y a aucun mal à le faire.

+0

Point pris. C'était une situation hypothétique bien sûr. Donc, ce que vous dites est, le seul problème avec la mise en place de nouveaux contextes de données 2000 serait une mauvaise performance pendant que la boucle est en cours d'exécution. Aucune fuite de mémoire ou quelque chose comme ça? –

+2

-1 pour "objet lourd", +1 pour "faire votre unité de travail". Le DataContext est fait et conçu pour être utilisé pour une unité de travail à la fois. L'appeler un objet lourd peut inciter les gens à le garder en vie plus longtemps qu'une seule unité de travail, ce qui entraîne beaucoup plus de problèmes. Bien que la création de 2000 dans une boucle serrée puisse être excessive, il peut ne pas être approprié de faire toutes les itérations dans un seul contexte de données, en particulier si un accès asynchrone simultané se produit via un autre DataContext. –

+0

@Byron - Impossible de commenter s'il y a des fuites de mémoire avec les objets Context. Mais je ne voudrais pas renouveler 2000 en boucle, sauf si vous y êtes obligé pour des raisons techniques. –

Questions connexes