CÁC GIẢI PHÁP LẬP TRÌNH C# - Trang 73

73

Chương 2: Thao tác dữ liệu

Khi khởi tạo đối tượng

System.Text.RegularExpressions.Regex

, hãy truyền thêm

tùy chọn

Compiled

thuộc kiểu liệt kê

System.Text.RegularExpressions.

RegexOptions

để biên dịch biểu thức chính quy thành Microsoft Intermediate

Language (MSIL).

Theo mặc định, khi bạn tạo đối tượng

Regex

, mẫu biểu thức chính quy do bạn xác định trong

phương thức khởi dựng được biên dịch thành một dạng trung gian (không phải MSIL). Mỗi
lần bạn sử dụng đối tượng

Regex

, bộ thực thi phiên dịch dạng trung gian này và áp dụng nó để

kiểm tra chuỗi. Với các biểu thức chính quy phức tạp được sử dụng thường xuyên, việc phiên
dịch lặp lặp đi lại có thể gây tác động xấu lên hiệu năng của ứng dụng.
Khi tùy chọn

RegexOptions.Compiled

được chỉ định, bộ thực thi sẽ biên dịch biểu thức chính

quy thành MSIL. MSIL này được gọi là mã just-in-time (JIT), được biên dịch thành mã máy
nguyên sinh trong lần thực thi đầu tiên, giống như mã assembly thông thường. Biểu thức
chính quy được biên dịch cũng được sử dụng giống như đối tượng

Regex

, việc biên dịch chỉ

giúp thực thi nhanh hơn.
Tuy nhiên, việc biên dịch biểu thức chính quy cũng có vài nhược điểm. Trước tiên, trình biên
dịch JIT phải làm việc nhiều hơn, dẫn đến chậm quá trình biên dịch, đặc biệt khi tạo biểu thức
chính quy được biên dịch khi ứng dụng khởi động. Thứ hai, biểu thức chính quy được biên
dịch vẫn tồn tại trong bộ nhớ khi không còn được sử dụng nữa, nó không bị bộ thu gom rác
(Garbage Collector) xóa đi như các biểu thức chính quy thông thường. Vùng nhớ bị chiếm chỉ
được giải phóng khi chương trình kết thúc, hoặc khi bạn giải phóng miền ứng dụng.
Dòng mã sau minh họa cách tạo một đối tượng

Regex

được biên dịch thành MSIL:

Regex reg = new Regex(@"[\w-]+@([\w-]+\.)+[\w-]+",

RegexOptions.Compiled);

Ngoài ra, phương thức tĩnh

Regex.CompileToAssembly

cho phép bạn tạo một biểu thức chính

quy được biên dịch và ghi nó vào một assembly khác. Nghĩa là bạn có thể tạo một assembly
chứa các biểu thức chính quy để sử dụng cho nhiều ứng dụng sau này. Để biên dịch một biểu
thức chính quy và lưu nó vào một assembly, thực hiện các bước sau:

1. Tạo một mảng

System.Text.RegularExpressions.RegexCompilationInfo

đủ lớn để

chứa các đối tượng

RegexCompilationInfo

, mỗi đối tượng ứng với một biểu thức chính

quy cần được biên dịch.

2. Tạo một đối tượng

RegexCompilationInfo

cho mỗi biểu thức chính quy và truyền đối số

cho phương thức khởi dựng để xác định các thuộc tính của biểu thức chính quy này.
Các thuộc tính thông dụng là:

IsPublic

giá trị

bool

xác định lớp biểu thức chính quy được tạo ra có tầm vực

là công khai hay không.

Name

một

String

xác định tên của lớp.

Namespace

một

String

xác định không gian tên của lớp.

Pattern

một

String

xác định mẫu mà biểu thức chính quy sẽ so trùng (xem chi

tiết ở mục 2.5).

Options

một giá trị thuộc kiểu liệt kê

System.Text.RegularExpressions.

RegexOptions

xác định các tùy chọn cho biểu thức chính quy.

Liên Kết Chia Sẽ

** Đây là liên kết chia sẻ bới cộng đồng người dùng, chúng tôi không chịu trách nhiệm gì về nội dung của các thông tin này. Nếu có liên kết nào không phù hợp xin hãy báo cho admin.