2010-02-15 25 views
6

lo mejor(cadena) lector [0] vs Convert.ToString (lector [0])

var s = (string)reader[0] 

o

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

?

+0

¿Por qué no lector [0] .ToString() como una opción? – Oded

+2

¿Puedes definir "mejor"? ¿Más rápido? ¿Más robusto? Más fácil de leer? ¿Huella de memoria más pequeña? –

Respuesta

7

yo diría que reader.GetString(0)

+2

Versión Circra de NETFX 2 Investigué mucho y encontré que los métodos Get con indexed look eran los que mejor funcionaban con todas las metodologías de lectura. – keithwarren7

+0

También he medido esto en 3.5 y he comprobado que esto es medible mejor que '(string) reader [0]'. – mquander

+0

¿Hay problemas con reader.GetString (0) leyendo valores de blob, p. Varchar (Max)? – Brettski

1

Conjeturaría reader[0].ToString();

2

Si el lector [0] es en realidad una cadena, entonces el (string)reader[0].

Es más claro y probablemente más rápido (a menos que el compilador realice una optimización mágica que desconozco).

1

qué sobre

lector [0] .ToString();

2
var s = (string)reader[0] 

le dará una excepción de difusión clase si no se puede lanzar como una cadena, mientras que

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

manejará con más gracia y obtendrá nula si no puede ser convertido Esto también manejará más tipos de objetos para el lector [0], ya que el otro método solo permitirá conversiones en las que el tipo se puede convertir a una cadena, mientras que esto admitirá cualquier tipo que la Clase Convert pueda manejar. Lo cual supongo que es más. Pero no puede ser ...

2

Esto es más rápido, sobre ~ 30% más rápido en mis pruebas:

var s = (string)reader[0]; 

Esto, sin embargo, no soplar cuando es nulo:

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]) 

Por lo tanto, es probablemente una cuestión de elegir teniendo en cuenta el contexto.

+1

+1 por considerar la legibilidad e intención del código, y no solo por el rendimiento. – rob

0

Me gustaría ir con

reader[0].ToString(); 
2

¿Por qué nadie considera la legibilidad y facilidad de mantenimiento?

sé que el autor se pregunta sobre: ​​

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

Pero ¿qué pasa con:

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

eso es más fácil de leer y más segura si cambio/cancelación/añade columnas y el índice está cambiando .. .esto es más valioso.

Un tipo dijo que el yeso duro es un 30% más rápido. ¿El 30% de 1 ms son 1,333 ms? seguramente no el 30% de la obtención de datos completos.

+0

Esta respuesta debe ser atendida. – jason