Mã C# sau mất 5 phút để chạy:Chuỗi hoạt động tối ưu hóa trong C#
int i = 1;
string fraction = "";
while (fraction.Length < 1000000)
{
fraction += i.ToString();
i++;
}
"Tối ưu hóa nó" như thế này làm cho nó chạy trong 1,5 giây:
int i = 1;
string fraction = "";
while (fraction.Length < 1000000)
{
// concatenating strings is much faster for small strings
string tmp = "";
for (int j = 0; j < 1000; j++)
{
tmp += i.ToString();
i++;
}
fraction += tmp;
}
EDIT: Một số người đã đề xuất sử dụng StringBuilder
, đây cũng là một gợi ý tuyệt vời và điều này xuất hiện tại 0.06s:
int i = 1;
StringBuilder fraction = new StringBuilder();
while (fraction.Length < 1000000)
{
fraction.Append(i);
i++;
}
Chơi xung quanh để tìm giá trị tối ưu là j
là một chủ đề trong một thời điểm khác, nhưng tại sao chính xác việc tối ưu hóa không rõ ràng này lại hoạt động tốt như vậy? Ngoài ra, về một chủ đề liên quan, tôi đã nghe nói rằng bạn không bao giờ nên sử dụng toán tử +
với chuỗi, ủng hộ string.Format()
, điều này có đúng không?
Thú vị, tôi tự hỏi phải mất bao lâu bằng cách sử dụng System.Text.StringBuilder nhưng tôi quá mệt mỏi để kích hoạt máy ảo, được ưa thích (nếu đó là một từ) – Kris
Kiểm tra xem, tôi đã thực hiện một StringBuilder kiểm tra ngay bây giờ. Nó chậm hơn so với vòng lặp nội bộ của tôi, nhưng vẫn FAR nhanh hơn so với mã ban đầu. –
Lưu ý rằng StringBuilder nhận một dung lượng ban đầu tùy chọn làm đối số của nó! Điều này sẽ được * nhiều * nhanh hơn sau đó. –