Chương 3: SƠ LƯỢC VE COMPACT FRAMEWORK
3.1.2. Những công cụ dé phát triển ứng dụng của Windows CE
3.1.3.1. Kiéu bộ nhớ trong Windows CE
Cũng như một hệ điều hành 32 bịt, Windows có thể gọi 4GB bộ nhớ ảo như những phiên bản desktop của Windows có thể làm. Tuy nhiên cách mà địa chỉ này được phản chia một cách trực tiếp có ảnh hưởng đến kiến trúc của các ứng dụng Windows CE. Một sự rang buộc chính, và lý do chung nhất cho những ứng dụng của Windows CE về van dé bộ nhớ, là mỗi ứng dụng được cap 32MB bộ nhớ ảo. Bộ nhớ có thể được cấp phát bên ngoài không gian 32MB, nhưng đó là bộ nhớ của tắt cả ứng dung trên thiết bị. Sự mô tả mô hinh bộ nhớ ở day là một tông quan tập trung vào những khía cạnh của Windows CE mà chúng ta cần phải hiểu khi khảo sát việc Compact Framework sử đụng bộ nhớ như thé
237%
nảo.
Hình 3.1. Màn hình sử dụng bộ nhớ của Windows CE
Chúng ta nhìn thấy ở đỏ có 3 vùng địa chỉ được phân chia khi một ứng dụng chạy:
© System Code Space- Những trang mã chỉ đọc cho tất cả hệ thống thư viện liên kết động như thư viện liên kết động coredll được tải vảo trong không gian này. Có một không gian mã hệ thống thiết bị , như vậy tất cả các hệ thong ứng dụng chia sẽ những trang mã cho hệ thong thư viện liên kết động.
Windows CE cấp những trang của kho bộ nhớ này và thu hồi về khi cần thiết.
e Per-Process Address Space- khi thực hiện, mỗi tiến trình của Windows CE được cấp phát 32 MB bộ nhớ, Mỗi tiến trình đợi trong img dụng, những trang mã cho những tập tin có thể thực hiện ứng dụng, những vùng nào được cấp phát và sử dụng bởi những ứng dụng giữa những phần tử lưu trong
không gian này.
-38-
¢ High Memory Area- vùng bộ nhớ cao cung cấp 1GB không gian bộ nhớ ảo từ những yêu câu thực tế cho những số lượng bộ nhớ ảo có thể được thỏa mãn. Tat cả bộ nhớ cho những tập tin vẽ biểu đồ được lưu trữ trong bộ nhớ cao. Tat cá dữ liệu lưu trong vùng bộ nhớ cao thi nhìn thấy những ứng dụng
trên thiết bj. Windows CE có thé trao đổi những trang từ vùng bộ nhớ cao
đến kho va ngược lại neu can thiết.
3.1.3.2. Quan lý bộ nhớ cơ sở trong .NET Compact Framework
Lam tăng năng suất làm việc của người phát triển ứng dụng là một trong những điều kiện chính để điều khiển sự tiếp nhận rộng rai của cả NET
Framework và .NET Compact Framework. Trong khi Compact Framework
xác định cung cấp những đặc tính quản lý bộ nhớ động, sự độc lập bộ xử ly,...thi nó cũng cung cắp thêm những đặc tính giúp cho người phát triển làm việc hiệu quả trên các thiết bị. Nói một cách cụ the. NET Compact Framework CLR quản lý bộ nhớ trong những tiến trình 32 MB bộ nhớ ảo hướng vào
những cách khác nhau của người phát triển.
Bing việc tránh cho người phát triển trong việc lo lắng khi nào cap phát và giải phóng bộ nhớ để ứng dụng của họ chạy tốt trong 32 MB giới hạn.
Compact Framework đã làm cho nó dé hơn dé viết những ứng dụng xử lý tốt trên những thiết bị có sự cường chế về bộ nhớ. Việc ma Windows CE giới hạn mỗi tiến trình có một không gian địa chi ảo nhỏ có lý do dé nhóm Compact
Framework thiết kế một nên tảng cho phép chạy tốt trên những rang buộc của
môi trường.
Trước khi mô tả những thiết kế đặc biệt để chạy trên những thiết bị có bộ nhớ cưỡng bức, chúng ta can tong kết tat ca dữ liệu thực thi trên hệ điều hành và
CLR tạo ra khi thực thi một ứng dung quản lý. Sau đó mô tả những kiểu đữ liệu
yêu cầu để chạy một ứng dụng. Nó sẽ chỉ ra nơi CLR cấp phát dữ liệu khi thực
-39-
thi liên quan đến các các vùng bộ nhớ của Windows CE được mô tả ở trên.
using System;
using System.ComponentModel;
using System.Drawing;
using System. Text;
using System. Windows.Forms;
namespace HelloDevice
public class Form! : Form
(
private MainMenu mainMenu!;
private Label labell;
public Form1()
{
InitializeComponent();
}
private void InitializeComponent()
{
this.mainMenul = new System. Windows.Forms.MainMenu();
this.labell = new System. Windows.Forms.Label{);
// Position the label
this.label 1 Location = new System.Drawing.Point(64, 81);
this.label I.Size = new System.Drawing.Size( 100, 20);
this.label |_Text = "Hello Device!";
/! Size the form
this.AutoScaleDimensions = new System.Drawing.SizeF(96F, 96F);
this.AutoScaleMode =
System. Windows.Forms.AutoScaleMode.Dpi;
this.ClientSize = new System.Drawing.Size(240, 268);
this.Controls. Add(this.label |);
this.Menu = this.mainMenul:
this.MinimizeBox = false;
this. Text = “Simple App";
static class Program
{
static void Main()
{
Application.Run(new Formi()):
-ăT-
Với ví dụ để thiết kế một form với những label đơn chứa câu” Hello
Device!”ơ trên. Ta sẽ nhóm bộ nhớ sử dụng lúc thực thi vào 6 loại sau:
Native code pages for the CLR dlls. Compact Framework CLR bao
gồm hai thư viện liên kết động: thư viện liên kết động ms coree va ms coree2_0.
Các thư viện liên kết động nảy cùng với phần native của sự thi hanh Compact Framework’ Windows Form netcfagl2_0.dll, là hệ thống thư viện liên kết động được xem xét. Hệ thống này được tải vào trong không gian mã hệ thông.
Application and Class Library assemblies. CLR phải tải tất cả ma IL
cho cả hai ứng dụng va cho các lớp thư viện ma nó sử dung bộ nhớ lớn, vì vậy
biên dich JIT có những truy cập đến IL, cái ma can thiết khi phát sinh cấu trúc
native code tương ứng vả nạp lớp cho những truy cập siêu dữ liệu nó cần khi đặt
ngoài việc mô tả cau trúc dit liệu đó. Ngoài module chứa đựng mã “The Hello Word" danh sách ở trén cũng yêu cầu IL cho mscorlib, System,
System.Windows.Forms and System.Drawing. Những tập tin chứa đựng các
module đó chính là bảng đồ bộ nhớ trong vùng bộ nhớ cao khi chúng được cần.
JIT-compiled native code. Khi một ứng dụng đang thực thị, biên dịch
JIT được gọi ở trên dé phát sinh mã native code cho mỗi phương thức khi được
truy cập. Mã native code được lưu trữ trong một bộ đệm bên trong không gian địa chỉ ảo.
Allocated reference types. Danh sách ở trên cấp phát nhiều kiểu tham
khảo, ngoài phần chính của Form, những thẻ hiện MainMenu, Label, Point, Size được tạo ra bộ nhớ cho tất cả tham khảo trên. Nhiều kiểu được cấp phát bên trong sự thi hành của các lớp thư viện. Bộ nhớ cho tất cả các kiểu tham khảo
trên được thu thập từ những kiểu dữ liệu vô nghĩa. GC là một khối ứng dụng lưu
trữ trong không gian địa chỉ của ứng dụng.
In-memory representation of type metadata, Trong khi một lớp hay
a
các phương thức của nó can suốt thời gian thực thi chương trình, CLR đọc sự trình bày siêu liên kết của chúng từ biểu do assemly vào vùng bộ nhớ cao. Ngôn ngữ siêu liên kết được sử dụng dé phát sinh một sự thé hiện của bộ nhớ hoặc phương thức của chúng. Sự trình bảy nảy được cất giữ trong một heap gọi là AppDomain heap. AppDomain heap được lưu trữ bên trong tiến trình bộ nhớ
ảo.
Miscellaneous allocations. Ngoài những phạm trù của việc mô tả định vị
ở trên, CLR còn phát sinh một ít đữ liệu bổ sung khi thực hiện một ứng dụng.
Dữ liệu trong phạm trù này bao gồm stubs được trình biên dich JIT sử dụng để
xác định liệu có phải một phương pháp đã được biên dịch và những phần tử dữ
liệu short-lived khác.
3.2. NET COMPACT FRAMEWORK
Nhứng nhà phát triển đã đưa ra những mục đích thiết kế cho Compact
Framework:
e Xây dựng trên lợi ich của NET Framework
¢ Duy trì tinh nhất quán với desktop
e Chạy tốt trên thiết bị đi động và thiết bị giả lập
¢ Giải thích sự lớn mạnh của nền tảng đích
3.2.1. Những khả năng Compact Framework
3.2.1.1. — Hỗ trợ các lớp ứng dụng .NET (Supported .NET
Application Classes )
Trong ba lớp ứng dụng .NET thì Compact Framework hỗ trợ lớp
Windows Forms- Những ứng dụng GUI. Sự hỗ trợ trên desktop và Compact
Framework được thực hiện là do nhiều lớp cung cấp trong
s43.
System.Windows.Forms namespace. 35 loại điều khiến hỗ trợ trên desktop, 28 loại hỗ trợ trên Compact Framework. Tuy nhiên, các loại điều khiển nảy thi
không được hỗ trợ hoản toàn. Điều chỉnh về kích thước và khả năng thực hiện phát triển trên thiết bị đi déng va trình giả lập, một tập hợp của các lớp thành
viên desktop- thuộc tính, phương thức, sự kiện thì được hỗ trợ trong Compact
Framework.
Một lớp ứng dụng khác của .NET ma Compact Framework hỗ trợ là XML Web services. Một chương trình Compact Framework có thé tao ra mét
XML Web services client, Trong thực tế Compact Framework cung cap một
trang client của web server nhưng không hỗ trợ một thiết bị cơ bản của Web
service server.