Thứ hai là thể tốt hơn một chút trong điều khoản sử dụng bộ nhớ, bởi vì nó không cần phải tính toán chuỗi trung gian ... nhưng nó ít có thể đọc được, IMO.
Cá nhân tôi muốn sử dụng:
msgEntry.AppendFormat("<{0}>{1}</{0}>", timeTag, timeStamp);
Bạn chưa thể hiện những gì bạn muốn làm với các StringBuilder
sau đó. Nếu bạn chỉ cần chuyển đổi nó thành một chuỗi, thì tôi sẽ sử dụng:
string text = string.Format("<{0}>{1}</{0}>", timeTag, timeStamp);
để bắt đầu.
Hiệu suất như thế nào? Vâng, có lẽ tệ hơn - sau khi tất cả, nó phải phân tích chuỗi định dạng. Nhưng trừ khi bạn đã đo lường điều này và thấy nó là nút cổ chai, tại sao bạn lo lắng?
Nói chung:
- Hãy chắc chắn rằng kiến trúc của bạn là hợp lý hiệu quả - đó là khó có thể thay đổi sau đó.
- Cân bằng thiết kế nội bộ giữa hiệu quả và tính đơn giản của bạn, với trọng tâm là khả năng thử nghiệm; việc thay đổi thiết kế sau này có thể mất một lúc, nhưng thường có thể khả thi nếu không có sự cố tương thích.
- Viết triển khai của bạn để có thể đọc được càng tốt.
- Đo lường hệ thống để tìm hiểu xem nó có hoạt động tốt hay không và nơi bị tắc nghẽn. Chúng hầu như không bao giờ có mã như thế này. (Chúng tôi không nói về chuỗi nối trong vòng lặp ở đây, sau khi tất cả.)
- Khi bạn đã tìm thấy nút cổ chai, hãy thử các tối ưu hóa khác nhau và đo chúng quá. Đừng cho rằng một cái gì đó bạn nghĩ sẽ nhanh hơn sẽ thực sự là sẽ nhanh hơn.
Hoặc mảng để vượt qua để Concat
... chúng ta không biết loại timeStamp
vì vậy chúng tôi không thể nói chính xác những gì đang xảy ra ở đó; ở dạng thứ hai nó có thể được nối thêm tại chỗ trong khi hình thức đầu tiên có thể cần phải đóng hộp nó và sau đó chuyển đổi nó thành một chuỗi trước khi thực hiện nối.
Việc triển khai chính xác để phân bổ lại vv cũng có thể đã thay đổi giữa .NET 3.5 và .NET 4 (Tôi biết một số bit thực hiện có). Không có điểm chuẩn rất cẩn thận, tôi thực sự không muốn nói nhanh hơn ... nhưng khả năng đọc dễ gọi hơn, mặc dù chủ quan.
Nguồn
2010-07-20 19:07:13
Trừ khi bạn đã phát hiện ra một vấn đề hiệu suất, hoặc mã này được thực hiện hàng ngàn lần bên trong một vòng lặp hoặc một cái gì đó, sự khác biệt là không liên quan. Đi với tùy chọn dễ đọc nhất. – JohnFx
Cũng có thể đáng xem xét việc sử dụng một số lớp XML hiện có.Có vẻ như bạn có thể không quen thuộc với khá nhiều khung công tác (vì bạn không biết về các chức năng định dạng chuỗi), tôi khuyên bạn nên chọn một thứ gì đó giống như một cuốn sách 21 ngày để đọc một cách lười biếng, để tìm hiểu về những thứ đó. – overslacked
Tôi bỏ phiếu cho mở lại: Khi không được sử dụng trong một vòng lặp tình hình thực hiện là khác nhau! Trong trường hợp cụ thể này, chuỗi nối (tùy chọn 1) sẽ sử dụng một cuộc gọi duy nhất tới String.Concat thực hiện tốt hơn bảy lệnh gọi tới StringBuilder.Append. Tôi vừa định viết một câu trả lời chỉ ra điều này ... – MartinStettner