Bài viết này sẽ đề cập đến việc tách chuỗi trong ngôn ngữ lập trình C#, cụ thể là vấn đề tối ưu tốc độ tách chuỗi khi sử dụng phương thức Split của lớp String.

Tối ưu tốc độ tách chuỗi

Giả sử có một chuỗi như sau: “aa:bb:cc:dd:ee”. Thực hiện tách theo ký tự ‘:’, kết quả đạt được là từ chuỗi ban đầu sẽ được tách ra thành các chuỗi như sau: “aa”, “bb”, “cc”, “dd”, “ee”.

Trong ngôn ngữ lập trình C#, để thực hiện việc tách chuỗi như yêu cầu bên trên thì sẽ dùng đến phương thức Split của lớp String.

Lớp String của C# sẽ cung cấp nhiều phương thức Split với các tham số khác nhau:

public String[] Split(String[]? separator, int count, StringSplitOptions options);
public String[] Split(String? separator, int count, StringSplitOptions options = StringSplitOptions.None);
public String[] Split(String[]? separator, StringSplitOptions options);
public String[] Split(String? separator, StringSplitOptions options = StringSplitOptions.None);
public String[] Split(char[]? separator, int count, StringSplitOptions options);
public String[] Split(char[]? separator, StringSplitOptions options);
public String[] Split(char separator, StringSplitOptions options = StringSplitOptions.None);
public String[] Split(char[]? separator, int count);
public String[] Split(params char[]? separator);
public String[] Split(char separator, int count, StringSplitOptions options = StringSplitOptions.None);

Bạn có thể đọc thêm về lớp String tại đây: String Class.

Tuy nhiên, trong phạm vi bài viết này, mình sẽ chỉ để cập đến 2 phương thức tách chuỗi dưới đây.

– Phương thức 1:

public String[] Split(char separator, StringSplitOptions options = StringSplitOptions.None);

Ví dụ:

string str = "aa:bb:cc:dd:ee";
string[] strArray = str.Split(':');

– Phương thức 2:

public String[] Split(params char[]? separator);

Ví dụ:

string str = "ab:bb:cc:dd:ee";
string[] strArray = str.Split(new char[] { ':' });

So sánh tốc độ của 2 cách tách chuỗi:

Mình thực hiện viết một chương trình dạng Console App và sử dụng lớp Stopwatch để đo thời gian tách chuỗi của 2 phương thức như sau.

using System.Diagnostics;

Console.WriteLine("\n");

string str = "aa:bb:cc:dd:ee";

Stopwatch s1 = new Stopwatch();
s1.Start();
string[] temp1 = str.Split(':');

long elapsedTicks = s1.ElapsedTicks;
Console.WriteLine($"str.Split(':'): {elapsedTicks}ms");


Stopwatch s2 = new Stopwatch();
s2.Start();
string[] temp = str.Split(new char[] { ':' });

elapsedTicks = s2.ElapsedTicks;
Console.WriteLine($"str.Split(new char[] {{':'}}): {elapsedTicks}ms");

Console.ReadKey();

Kết quả sau khi chạy chương trình:

Ảnh chụp kết quả của việc so sánh tốc độ giữa hai phương thức tách chuỗi (tối ưu tốc độ tách chuỗi).
Kết quả khi chạy 2 phương thức tách chuỗi (Split).

Nhìn vào kết quả này, sử dụng phương thức tách chuỗi thứ 2 cho tốc độ xử lý nhanh hơn đáng kể so với phương thức thứ nhất.

Lời kết

Qua bài viết này, mình đã chia sẻ cách để tối ưu hóa tách chuỗi khi dùng phương thức Split của lớp String trong C#, với một thay đổi nhỏ. Một thay đổi nhỏ nhưng có thể cải thiện hiệu suất đáng kể nếu như chương trình của bạn có thực hiện việc tách chuỗi nhiều lần.

Được phân loại: