BomKhung.Com Đã Quay Trở Lại
Hoạt Động Dưới Tên Miền Hung.Pro.VN
00 Days
00 Hours
00 Minutes
00 Seconds
Hiện website đang cập nhật nội dung bài viết, nếu có lỗi gì mọi người có thể thông báo cho mình Tại đây!

[VISUAL BASIC] .NET – Quá trình biên dịch

Hi mọi người, .NET đóng gói mã nguồn trong các file chương trình (assembly dưới dạng .exe, .dll) chứa mã lệnh Microsoft Intermediate Language (MSIL hay viết gọn là IL). Đây không phải là ngôn ngữ mà máy có thể hiểu. Vì thế khi chương trình của bạn được thực thi, một trình biên dịch JIT (Just-In-Time, còn gọi là Jitter, đây là một phần của CLR – Common Language Runtime) sẽ được gọi để biên dịch chương trình thành mã máy nhờ đó CPU có thể hiểu và thực hiện.

Về cơ bản, phương pháp này được minh họa theo mô hình sau:

Việc biên dịch này bao gồm các công việc tối ưu mã lệnh dựa theo thông tin của máy tính (CPU, hệ điều hành) giúp chương trình hoạt động tốt hơn. Nhờ đó hiệu suất của chương trình sẽ tốt hơn với việc biên dịch hoàn toàn một chương trình ra mã máy và sử dụng ở những máy tính có cấu hình khác nhau, theo cách truyền thống. Tuy nhiên mặt trái của JIT là khiến việc khởi động chương trình sẽ trở nên chậm hơn(được gọi với thuật ngữ “startup time delay”). Hạn chế này tương đối nhỏ và có thể bỏ qua đối với các ứng dụng nhỏ.

Normal-JIT Compilation

Đây là cách mặc định được sử dụng khi bạn tạo ra các chương trình từ .NET. Khi chương trình được thực thi, JIT sẽ phải (và chỉ) biên dịch các đoạn mã (được tính theo method) cần thiết mà chương trình cần đến để thực thi. Trong quá trình thực thi, khi một method được gọi đến, JIT sẽ biên dịch toàn bộ method đó. Các method sau khi được biên dịch sẽ được lưu lại trong bộ nhớ, do đó nó không cần phải thực hiện việc biên dịch lại các đoạn mã khi chúng được thực thi nhiều lần. Ví dụ chương trình của bạn rất nhiều chức năng, nhưng nếu người dùng chỉ dùng đến chức năng A thì chỉ mỗi phần mã của A được biên dịch thành mã máy. Cách biên dịch theo này sẽ gây ra một khoảng thời gian chờ đợi mà bạn có thể nhận thấy khá rõ khi lần đầu tiên mở một chức năng nào đó của chương trình.

Khi chương trình kết thúc, các phần mã đã được biên dịch sẽ không được lưu lại. Vì thế mỗi lần chương trình khởi động, nó sẽ được biên dịch lại.

Econo-JIT Compilation

Đây là loại biên dịch cũ và không còn được hỗ trợ. Tên gọi của nó là viết tắt của “economical”, nhằm mô tả đây là một cách biên dịch “tiết kiệm”. Vấn đề “tiết kiệm” ở đây nói về bộ nhớ. Loại biên dịch này tương tự như loại thông thường trên nhưng nó không lưu lại các phần đã được biên dịch. Vì thế mỗi khi chương trình cần thực thi một đoạn mã, đoạn mã đó sẽ luôn được biên dịch lại thành mã máy.

Pre-JIT Compilation

Phương pháp này sẽ biên dịch toàn bộ chương trình trước khi chương trình đó được sử dụng. Như vậy khi chương trình được chạy, nó sẽ hoàn toàn không cần đến JIT. Và để thực hiện được cách biên dịch này, bạn cần phải dùng đến công cụ NGen.exe (Native Image Generator). NGen cũng sử dụng JIT trong quá trình biên dịch và lưu kết quả lại dưới dạng một native image và lưu trong Native Image Cache. Với phương pháp này, bạn sẽ tránh được việc “startup delay time” nhưng hiệu suất của chương trình khi chạy có thể không tốt bằng cách thông thường. Và một bất tiện nữa, bạn phải cập nhật lại native image này mỗi khi code được thay đổi.

Để sử dụng NGen, bạn có thể mở Visual Studio Command Prompt và dùng lệnh:
ngen install myapp.exe

Và lệnh sau dùng để kiểm tra xem chương trình của bạn đã được tạo native image chưa:
ngen display myapp.exe

Chúc các bạn thành công với bài viết trên.

Đăng nhận xét

Đồng ý sữ dụng cookie
Chúng tôi sử dụng cookie trên trang web này để phân tích lưu lượng truy cập, ghi nhớ tùy chọn của bạn và tối ưu hóa trải nghiệm của bạn.
Xem thêm
Oops!
Có vẻ như kết nối internet của bạn có vấn đề. Vui lòng kết nối lại và duyệt web.
AdBlock Detected!
Chúng tôi phát hiện bạn đang sử dụng plugin chặn quảng cáo trong trình duyệt của mình.
Doanh thu chúng tôi kiếm được từ quảng cáo được sử dụng để quản lý trang web này, chúng tôi yêu cầu bạn đưa trang web của chúng tôi vào danh sách trắng trong plugin chặn quảng cáo của bạn.
Site is Blocked
Sorry! This site is not available in your country.
Kỹ thuật số thế hệ tiếp theo Chào mừng bạn đến với trò chuyện WhatsApp
Xin chào! Chúng tôi có thể giúp gì cho bạn hôm nay?
Nhập vào đây...