2010-02-12 5 views
5

Dans notre application n-tier maintenant pas si moderne, nous faisons une utilisation intensive de DataSets et nous évaluons la modification d'autres objets plus légers (c'est-à-dire des collections d'objets typés).Quel est le coût en mémoire d'un DataSet par rapport à d'autres classes .Net Collection?

Existe-t-il un document de référence sur ce que nous pouvons gagner en consommation de mémoire en faisant cela?

+0

Je pense presque que c'est le type de question où la réponse dépend de beaucoup de facteurs, y compris comment vos objets typés sont structurés. Avez-vous essayé d'exécuter des tests de performance? Comme la sérialisation de plusieurs milliers de vos objets par rapport aux mêmes données dans un ensemble de données. – David

+0

Je ne suis pas sûr que nous pouvons comparer DataSet avec est datation relationnelle hors ligne avec les types de collection qui sont des listes d'objets similaires. Nous pouvons comparer List et ArrayList, les tableaux et les listes mais pas les ensembles de données. – sashaeve

+0

Bonjour @sash, merci pour votre contribution. Ce que je veux dire, c'est que linq to entities et linq to sql produisent toutes les deux des collections d'objets à partir d'une source de données relationnelle et ils étaient le remplacement naturel de ADO.Net qui utilise DataSets. Donc, en ces termes, je pense qu'ils peuvent être comparés. – jmservera

Répondre

3

Les poids lourds sur l'utilisation de la mémoire pour un DataSet sont l'objet DataRow requis pour chaque ligne dans un DataTable et l'index généré automatiquement pour chaque colonne. Le stockage des valeurs de colonne est efficace, vous ne pouvez pas améliorer cela. Remplacer cela par une collection de collections génériques permettra d'éliminer les DataRows, ce qui pourrait représenter une économie approximative de 50% si le DataTable n'a pas beaucoup de colonnes.

Les index sont ce dont vous avez besoin. Ils font des requêtes sur le DataSet très rapidement, vous le perdrez à moins que vous fournissiez une sorte de substitut personnalisé. Il est impossible de dire si vous devrez fournir un produit de remplacement, cela dépend du type de requêtes que vous exécutez.

+0

Merci pour vos conseils. Nous utilisons des DataSets principalement pour l'édition, tout comme des objets persistants, donc nous n'utilisons pas beaucoup les fonctionnalités d'indexation. Ce que nous utilisons le plus est la fonctionnalité RowVersion afin de savoir ce qui a été édité. – jmservera

0

Cette question est assez subjective et dépend de nombreux facteurs qui ne peuvent être montrés ici. Si la question était, un DataSet consommera plus de mémoire qu'une collection générique du même nombre d'objets alors la réponse est généralement oui. Comme la question est de savoir combien cela va dépendre de la façon dont vous utilisez le DataSet (c'est-à-dire: données typées, DataViews ?, indexes?) Et seulement mesuré avec précision par des tests. Toutefois, en fonction de la façon dont vous utilisez les DataSets, vous devrez peut-être reconstruire une grande partie de cette fonctionnalité.

Questions connexes