2013-03-08 7 views
1

Plus, y a-t-il une référence sur la caractéristique perf de ces choses? Je vois que MSDN raconte ce qu'il fait, mais rarement comment c'est fait/quelles sont les garanties de vitesse.Accède à DataRowCollection.Count O (1) ou O (n) sur DataTable

La structure précise que je mentionne est datarowcollection.

+2

Eh bien, semble assez facile à tester. Temps combien de temps cela prend pour une collection de taille 1, et pour une collection de taille 1 000 000. (Évidemment, vous aurez besoin de millions d'appels moyennés pour que cela ait une signification quelconque.) S'ils sont à peu près les mêmes, c'est clairement O (1), si le plus grand ensemble de données prend plus de temps, ce n'est pas O (1). Cela dit, je suis raisonnablement confiant que c'est O (1). – Servy

+0

Je me demande s'il n'y a pas de convention dans C# où Count() pourrait être O (n) et Count serait O (1). – nicolas

+0

Eh bien, une propriété, de par sa conception, ne devrait pas faire beaucoup de calculs complexes, elle devrait simplement retourner rapidement une valeur, donc avoir une propriété soit O (n) violerait la convention. Cela dit, il existe des méthodes 'Count()' qui sont O (1), et elles ne violent aucune convention. – Servy

Répondre

1

La propriété Count est O (1), car le nombre est stocké dans la classe, il n'est pas découvert en comptant réellement les enregistrements.

Vous avez raison de dire que la documentation ne contient pas beaucoup d'informations sur les performances de cette classe, vous trouverez plus d'informations sur les performances pour la classe List<T> par exemple. Vous verriez généralement ce que fait la propriété ou la méthode pour déterminer les caractéristiques de performance.

Une indication dans ce cas est que Count est une propriété, ce qui signifie généralement qu'il s'agit d'une opération O (1). A titre de comparaison, IEnumerable<T>.Count est une méthode au lieu d'une propriété, car elle parcourt les éléments pour les compter.

+0

Ne serait-il pas plus juste de dire que IEnumerable .Count() PEUT être O (N), comme ce n'est certainement pas le cas lorsque l'implémentation sous-jacente est List ; Le point étant qu'un client de IEnumerable ne peut pas compter sur Count() étant performant. –

+0

@PieterGeerkens: Il est vrai que la méthode 'Count' a des optimisations pour certaines collections, mais c'est au-delà de cet exemple. – Guffa

+0

Intéressant. Je me demande si l'on pourrait déterminer automatiquement où changer la représentation. Certains analystes statiques regardent sûrement ceci, bien que je ne saurais pas où regarder. – nicolas

Questions connexes