Chuỗi (string) trong C# là một kiểu dữ liệu có sẵn như các kiểu int, long…, có đầy đủ tính chất mềm dẻo, mạnh mẽ và dễ dùng. Một đối tượng chuỗi trong C# là một hay nhiều ký tự unicode không thể thay đổi thứ tự. Nói cách khác là các phương thức áp dụng lên chuỗi không làm thay đổi bản thân chuỗi, chúng chỉ tạo một bản sao có sửa đổi, chuỗi gốc vẫn giữ nguyên.
– Trong C#, bạn có thể sử dụng các chuỗi (string) như là mảng các ký tự. Tuy nhiên, phổ biến hơn là để sử dụng từ khóa string để khai báo một biến chuỗi. Từ khóa string là một alias cho lớp System.String trong C#.
– Việc nối chuỗi trong C# là rất phổ biến, được sử dụng nhiều khi lập trình, và trong C# cũng hỗ trợ nhiều cách nối chuỗi như sau, tuy nhiên cách nối chuỗi nào là hiệu quả nhất thì chúng ta sẽ cùng thảo luận trong bài viết này.
- Sử dụng StringBuilder
- Sử dụng toán tử dấu + (+演算子, simple concatenation)
- Sử dụng string.Format()
- Sử dụng string.Concat()
- Sử dụng string.Replace()
– Để có thể tính toán được thời gian thực thi của mỗi cách nối chuỗi trên, mình sẽ viết một đoạn code demo như sau:
using System; using System.Text; namespace MinhHoangBlog { class Program { static void Main(string[] args) { var len = 10000000; var sw = new System.Diagnostics.Stopwatch(); // StringBuilder sw.Start(); for (int ii = 0; ii < len; ii++) { StringBuilder sb = new StringBuilder(); sb.Append("%").Append(ii).Append("%"); var s = sb.ToString(); } sw.Stop(); Console.WriteLine(sw.Elapsed.ToString()); // Simple Concatenation + sw.Restart(); for (int ii = 0; ii < len; ii++) { var s = "%" + ii + "%"; } sw.Stop(); Console.WriteLine(sw.Elapsed.ToString()); // string.Format sw.Restart(); for (int ii = 0; ii < len; ii++) { var s = string.Format("%{0}%", ii); } sw.Stop(); Console.WriteLine(sw.Elapsed.ToString()); // string.Concat sw.Restart(); for (int ii = 0; ii < len; ii++) { var s = string.Concat("%", ii, "%"); } sw.Stop(); Console.WriteLine(sw.Elapsed.ToString()); // string.Replace sw.Restart(); for (int ii = 0; ii < len; ii++) { var s = "{s1}{s2}{s3}"; s = s.Replace("{s1}", "%").Replace("{s2}", ii.ToString()).Replace("{s3}", "%"); } sw.Stop(); Console.WriteLine(sw.Elapsed.ToString()); } } }
– Sau khi thực hiện chạy 5 lần và tính thời gian thực thi trung bình của mỗi cách, chúng ta có kết quả như sau:
Phương pháp | Thời gian thực thi |
StringBuilder | 00:00:02.3464193 ③ |
Toán tử dấu + | 00:00:02.0393685 ② |
string.Format | 00:00:02.5324847 ④ |
string.Concat | 00:00:01.8001354 ① |
string.Replace | 00:00:04.1992046 ⑤ |
– Từ kết quả trên chúng ta thấy rằng, string.Concat() cho tốc độ nối chuỗi nhanh nhất và nên tránh nối chuỗi bằng string.Replace() (vì cơ bản thì string.Replace() sinh ra không phải mục đích để nối chuỗi), 3 phương pháp còn lại thì cho tốc độ khác nhau không nhiều. Do đó, tùy thuộc vào mục đích của bạn mà chọn phương pháp thích hợp để sử dụng.
* Concatenate (+) is best at concatenating. * StringBuilder is best when you need to building. * string.Format is best at formatting.