- vừa được xem lúc

Sự khác nhau giữa string và StringBuilder

0 0 6

Người đăng: Hoàng Cao Phi

Theo Viblo Asia

Trong C#, string và StringBuilder là hai lớp thông được dùng để lưu trữ và thao tác với chuỗi, tuy nhiên bạn đã biết đặc điểm khác biệt của hai lớp này chưa? Khi nào sử dụng string và khi nào sử dụng StringBuilder? Sau đây chúng ta sẽ tìm hiểu về sự khác biệt giữa chúng:

String StringBuilder
Nằm trong namespace System Nằm trong namespace System.Text
Một instance của lớp string là immutable (không có khả năng thay đổi). Nghĩa là string Object sau khi tạo sẽ không thay đổi được nó ở trong memory. Nếu thay đổi nó, thì nó sẽ tạo ra một instance mới trong memory. Một instance của StringBuilder là mutable (có khả năng thay đổi), sau khi tạo chúng ta có thể tạo ra bất cứ thao tác nào thay đổi nó ở trong memory như mở rộng, xóa… mà chỉ tạo duy nhất một instance.
Bởi vì string là immutable nên nó có thể sử dụng an toàn trên nhiều luồng mà không gây sự cố nào. Thread safe được đảm bảo. StringBuilder trong C# là thread-safe, có thể bị lỗi dữ liệu khi lập trình đa luồng nếu không lock lại.
Hiệu suất sẽ không cao khi có thao tác chỉnh sửa hoặc nối chuỗi. Hiệu quả cao khi chỉnh sửa chuỗi hoặc nỗi nhiều chuỗi lại với nhau.

Để hiểu thêm, chúng ta sẽ đi đến một đoạn code và trực quan hóa lại cách string và StringBuilder làm việc: string

string testString = "Hello!";
testString = testString + " This";
testString = testString + " is";
testString = testString + " c#";
testString = testString + " tutorial";
Console.WriteLine(testString);

Trong ví dụ trên, ta sửa đổi testString 5 lần, tính cả lần khởi tạo, vì vậy nó sẽ tạo 5 instance của object ở trong memory. Cả 5 instance đều tồn tại cùng lúc nhưng biến testString sẽ chỉ trỏ đến bộ nhớ của cùng của nó, như hình minh họa dưới đây: image.png

StringBuilder

StringBuilder stringBuilder = new StringBuilder();
stringBuilder.Append("Hello!");
stringBuilder.Append(" This");
stringBuilder.Append(" is");
stringBuilder.Append(" c#");
stringBuilder.Append(" tutorial");
Console.WriteLine(testString);

Cũng giống ví dụ trên, chúng ta cũng tạo là một biến string và nối nó 5 lần. Nhưng đối với StringBuilder, thay vì khởi tạo bộ nhớ 5 lần và tạo ra 5 instance thì nó chỉ tạo duy nhất 1 instance và mở rộng bộ nhớ ra từ đó, như hình minh họa dưới đây: image.png

Như vậy, chúng ta đã đi qua những điểm khác biệt cơ bản giữa string và StringBuilder. Chúc ae code tốt!

Tham khảo: http://gyanendushekhar.com/2016/05/01/string-and-stringbuilder-csharp/

Bình luận

Bài viết tương tự

- vừa được xem lúc

Các loại tham chiếu Nullable trong C# (Phần 1)

1. Giới thiệu. C# 8.0 giới thiệu kiểu tham chiếu nullable và kiểu tham chiếu non-nullable cho phép bạn đưa ra các lựa chọn quan trọng về thuộc tính cho các biến kiểu tham chiếu:.

0 0 36

- vừa được xem lúc

Command pattern qua ví dụ !

Command pattern là gì . Command pattern khá phổ biến trong C #, đặc biệt khi chúng ta muốn trì hoãn hoặc xếp hàng đợi việc thực hiện một yêu cầu hoặc khi chúng ta muốn theo dõi các hoạt động. Hơn nữa, chúng ta có thể hoàn tác tác chúng. .

0 0 178

- vừa được xem lúc

Hiểu Liskov Substitution Principle qua ví dụ !

Liskov Substitution Principle là gì . Nguyên tắc đóng mở xác đinh rằng các instance của lớp con có thể thay thế được instance lớp cha mà vẫn đảm bảo tính đúng đắn của chương trình.

0 0 24

- vừa được xem lúc

Creating custom Controls Wpf

Introduction. Wpf/winforms provides various controls like Buttons, Textbox, TextBlock, Labels etc.

0 0 41

- vừa được xem lúc

[P1] Chọn công nghệ nào để xây dựng website?

Hiện nay nhu cầu phát triển website, app tăng rất cao do xu hướng "số hóa 4.0" trong và ngoài nước.

0 0 71

- vừa được xem lúc

Kiểu dữ liệu trong C#

Dẫn nhập. Ở bài BIẾN TRONG C# chúng ta đã tìm hiểu về biến và có một thành phần không thể thiếu khi khai báo biến – Đó là kiểu dữ liệu.

0 0 24