2010-02-15 6 views
6

ce qui est mieux(string) [0] vs Convert.ToString (lecteur [0])

var s = (string)reader[0] 

ou

var s = Convert.ToString(reader[0]) 

?

+0

Pourquoi ne pas lire [0] .ToString() en option? – Oded

+2

Pouvez-vous définir "mieux"? Plus rapide? Plus robuste? Plus facile à lire? Une plus petite empreinte mémoire? –

Répondre

7

Je dirais que reader.GetString(0)

+2

Sortie Circra de NETFX 2 J'ai fait beaucoup de recherches et j'ai trouvé que les méthodes Get avec les indexés étaient les plus performantes de toutes les méthodologies de lecteurs. – keithwarren7

+0

J'ai aussi mesuré ceci en 3.5 et j'ai trouvé que cela se mesurait mieux que le lecteur (string) [0] '. – mquander

+0

Y at-il des problèmes avec reader.GetString (0) lecture des valeurs de blob, par ex. Varchar (Max)? – Brettski

1

Je suppose que reader[0].ToString();

2

Si le lecteur [0] est en fait une chaîne, puis le (string)reader[0].

C'est plus clair et probablement plus rapide (à moins que le compilateur ne fasse une optimisation magique que je ne connais pas).

1

Qu'en est-

lecteur

[0] .ToString();

2
var s = (string)reader[0] 

vous donnera une exception en fonte de classe si elle ne peut pas être jeté comme une chaîne, tandis que

var s = Convert.ToString(reader[0]) 

se chargera plus gracieusement et vous obtiendrez null si elle ne peut pas être converti. Cela gèrera aussi plus de types d'objets pour le lecteur [0] car l'autre méthode autorisera uniquement les castings où le type peut être transtypé en une chaîne, alors que cela supportera n'importe quel type que la classe Convert peut gérer. Ce que je suppose est plus. Mais peut-être pas ...

2

C'est plus rapide, environ ~ 30% plus rapide dans mes tests:

var s = (string)reader[0]; 

Ceci, cependant, ne soufflera pas haut quand c'est nul:

var s = Convert.ToString(reader[0]); 
4
// Conveys that you are sure that reader[0] is a string and 
// if it's not you probably have bigger problems 
// than the resulting exception 
var s = (string)reader[0]; 

// Conveys that you are hoping that reader[0] is convertible to a string 
var s = Convert.ToString(reader[0]) 

Il est donc probablement nécessaire de choisir le contexte.

+1

+1 pour considérer la lisibilité et l'intention du code, et pas seulement la performance. – rob

0

Je voudrais aller avec

reader[0].ToString(); 
2

Pourquoi personne ne considère la lisibilité et la maintenabilité?

Je sais l'auteur pose des questions sur:

var s = (string)reader[0]  
or  
var s = Convert.ToString(reader[0]) 

Mais qu'en est:

string s = reader["Fieldname"].ToString(); 

des thats plus lisible et plus sûr si vous échangez/supprimer/ajouter des colonnes et l'index est en train de changer .. Cela vaut à coup sûr plus de valeur.

Un gars a dit que la fonte dure est 30% plus rapide. Eh bien 30% de 1 ms sont 1,333 ms? sûrement pas 30% de l'ensemble des données aller chercher.

+0

Cette réponse devrait être prise en compte. – jason

Questions connexes