2010-02-15 38 views
6

gì tốt hơn(string) đọc [0] vs Convert.ToString (đọc [0])

var s = (string)reader[0] 

hoặc

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

?

+0

Tại sao không đọc [0] .ToString() làm tùy chọn? – Oded

+2

Bạn có thể xác định "tốt hơn" không? Nhanh hơn? Mạnh mẽ hơn? Dễ đọc hơn? Dấu chân bộ nhớ nhỏ hơn? –

Trả lời

7

Tôi muốn nói reader.GetString(0)

+2

Circra phát hành của NETFX 2 Tôi đã làm rất nhiều nghiên cứu và tìm thấy các phương pháp Get với cái nhìn được lập chỉ mục là hiệu suất tốt nhất của tất cả các phương pháp đọc. – keithwarren7

+0

Tôi cũng đã đo điều này trong 3.5 và thấy rằng điều này thực hiện tốt hơn so với đầu đọc '(chuỗi) [0]'. – mquander

+0

Có vấn đề với người đọc.GetString (0) đọc các giá trị blob, ví dụ: Varchar (Max)? – Brettski

1

tôi sẽ đoán reader[0].ToString();

2

Nếu đọc [0] thực sự là một chuỗi, thì (string)reader[0].

Nó rõ ràng hơn và có lẽ nhanh hơn (trừ khi trình biên dịch thực hiện một số tối ưu hóa phép thuật mà tôi không biết).

1

gì về

đọc [0] ToString();

2
var s = (string)reader[0] 

sẽ cung cấp cho bạn một ngoại lệ lớp diễn viên nếu nó không thể được chọn vào vai một chuỗi, trong khi

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

sẽ xử lý nó một cách duyên dáng hơn và bạn sẽ nhận được null nếu nó không thể được chuyển đổi. Điều này cũng sẽ xử lý nhiều loại đối tượng cho người đọc [0] như phương pháp khác sẽ chỉ cho phép các phôi mà loại có thể được đúc thành chuỗi, trong khi điều này sẽ hỗ trợ bất kỳ loại nào mà Lớp chuyển đổi có thể xử lý. Mà tôi cho là nhiều hơn. Nhưng không thể được ...

2

Đây là nhanh hơn, nhanh hơn khoảng ~ 30% trong thử nghiệm của tôi:

var s = (string)reader[0]; 

này, tuy nhiên, sẽ không thổi khi nó không có giá trị:

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

Vì vậy, có thể là vấn đề chọn xem xét ngữ cảnh.

+1

+1 để xem xét khả năng đọc và ý định của mã và không chỉ hiệu suất. – rob

0

tôi sẽ đi với

reader[0].ToString(); 
2

Tại sao không ai coi là khả năng đọc và khả năng bảo trì?

Tôi biết tác giả hỏi về:

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

Nhưng những gì về:

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

thats dễ đọc hơn và an toàn hơn nếu bạn trao đổi/xóa/thêm các cột và chỉ số đang thay đổi .. điều này chắc chắn đáng giá hơn.

Một anh chàng cho rằng dàn diễn viên cứng nhanh hơn 30%. Vâng 30% của 1 ms là 1,333 ms? chắc chắn không phải 30% của toàn bộ dữ liệu tìm nạp.

+0

Câu trả lời này nên được chú ý. – jason