thể trùng lặp:
Is it better to declare a variable inside or outside a loop?Đây có phải là "tuyên bố di chuyển gần hơn với việc sử dụng" thực sự thích hợp hơn không?
Resharper muốn tôi thay đổi điều này:
int Platypus;
string duckBill1;
string duckBill2;
string duckBill3;
. . .
using (OracleDataReader odr = ocmd.ExecuteReader()) {
while (odr.Read()) {
Platypus = odr.GetInt32("Platypus");
duckBill1 = odr.GetString("duckBill1");
duckBill2 = odr.GetString("duckBill2");
duckBill3 = odr.GetString("duckBill3");
switch (Platypus) {
. . .
... như thế này:
using (OracleDataReader odr = ocmd.ExecuteReader()) {
while (odr.Read()) {
int Platypus = odr.GetInt32("Platypus");
string duckBill1 = odr.GetString("duckBill1");
string duckBill2 = odr.GetString("duckBill2");
string duckBill3 = odr.GetString("duckBill3");
switch (Platypus) {
. . .
... nhưng theo cách này (có vẻ như, ít nhất, đó) các vars đang được tuyên bố N lần, một lần cho mỗi lần thông qua các vòng lặp while. Là cách Resharperized thực sự tốt hơn so với bản gốc?
Và nếu bạn khai báo chúng ngoài vòng lặp, phạm vi của chúng sẽ rộng hơn, có nghĩa là sẽ mất nhiều thời gian hơn để chúng được phát hành. +1 –
@AndreCalil Không, điều đó sẽ không xảy ra vì phạm vi không liên quan gì đến việc thu thập đủ điều kiện. Tác động hiệu suất là không, như rsbarro nói. –
@JonHanna Tôi xin lỗi, tôi không thấy bộ sưu tập nằm trong chủ đề nào. Nếu bạn khai báo một biến trên phạm vi của một phương thức, nó sẽ không được phát hành cho đến khi kết thúc phương thức. Nếu phạm vi chỉ là một vòng lặp (giống như 'while'), nó sẽ được phát hành sớm hơn. Và thậm chí một chuỗi rỗng phân bổ bộ nhớ: http://stackoverflow.com/a/6601485/1484750 –