Cách tốt nhất để kiểm tra là thử cả hai phương pháp trong một vòng lặp, khoảng 100.000 mỗi lần. Đo thời lượng mỗi 100.000 lần lặp lại và so sánh chúng. Tôi không nghĩ có nhiều sự khác biệt. Nhưng có một sự khác biệt nhỏ, mặc dù. Ví dụ đầu tiên sẽ có nhiều biến số như số lần lặp. Ví dụ thứ hai chỉ có một biến. Trình biên dịch đủ thông minh để thực hiện một số tối ưu hóa ở đây, vì vậy bạn sẽ không nhận thấy một sự cải thiện tốc độ. Tuy nhiên, nếu bạn không muốn sử dụng đối tượng cuối cùng được tạo bên trong vòng lặp khi bạn ở bên ngoài vòng lặp, thì giải pháp đầu tiên sẽ tốt hơn. Trong giải pháp thứ hai, nó chỉ mất một lúc trước khi bộ thu gom rác sẽ giải phóng đối tượng cuối cùng được tạo ra. Trong ví dụ đầu tiên, bộ thu gom rác sẽ nhanh hơn một chút trong việc giải phóng đối tượng. Nó phụ thuộc vào phần còn lại của mã nhưng nếu bạn lưu trữ rất nhiều dữ liệu trong đối tượng StringBuilder này thì ví dụ thứ hai có thể giữ cho bộ nhớ này lâu hơn rất nhiều, do đó làm giảm hiệu suất mã của bạn sau khi rời khỏi vòng lặp!
Sau đó, một lần nữa, nếu các đối tượng ăn lên 100 KB và bạn có 16 GB trong máy của bạn, không ai quan tâm ... Bộ thu gom rác cuối cùng sẽ giải phóng nó một lần nữa, có thể ngay khi bạn rời khỏi phương thức chứa vòng lặp này.
Nguồn
2010-08-02 14:23:10
Tương tự như http://stackoverflow.com/questions/2447475/best-practice-for-creating-objects-used-in-for-foreach-loops –
Lỗi không liên quan là phiên bản thứ hai nên được khởi tạo thành null để tránh phân bổ quá mức. –