2008-12-15 37 views
15

Vì XAML được biên dịch, nên không có sự khác biệt trong việc thực thi mã như thế này.
Winforms (mã tương tự):So sánh hiệu suất của Winforms và WPF

Form formPeter = new Form(); 
Textbox textbox = new Textbox(); 
Label l1 = new Label1(); 

XAML không được phân tích trong thời gian chạy, như tôi nghĩ ... :-)

Nhưng những gì về render/thực hiện các hình thức lớn với rất nhiều điều khiển? Công nghệ nào nhanh hơn?

Trả lời

20

nào Công nghệ là nhanh hơn? Tôi sợ câu hỏi của bạn không thực sự có một câu trả lời đơn giản.

Nhận xét của bạn về XAML không được phân tích cú pháp khi chạy là vừa đúng và sai. Trong khi XAML không được phân tích cú pháp một phiên bản nhị phân chuẩn hóa của nó (được nhúng dưới dạng tài nguyên trong ứng dụng của bạn) được gọi là BAML được phân tích cú pháp khi chạy. Để nói DirectX nhanh hơn GDI cũng là một thứ đơn giản hóa - các công nghệ dựng hình dựa trên WPF và GDI chỉ có các đặc tính hiệu suất khác nhau khác nhau. Ví dụ WPF sử dụng chế độ hiển thị được giữ lại, trong khi WinForms và các công nghệ dựa trên GDI khác thì không. Các đối tượng WPF có xu hướng nặng hơn nhiều vì chúng hỗ trợ nhiều thuộc tính nhiều hơn so với các đối tác winform của chúng. Chúng tôi có nhiều thập kỷ kiến ​​thức về cách làm cho GDI hoạt động khá nhanh và chỉ một thời gian tương đối ngắn với WPF và XAML. WP2 là đủ nhanh để viết các ứng dụng, nhưng bạn cần phải cảnh giác liên tục rằng số phần tử của bạn không thổi ra (bằng cách tạo các mẫu quá phức tạp chẳng hạn, và sau đó lặp lại hàng trăm hoặc hàng nghìn lần trong giao diện người dùng của bạn). Ngoài ra WPF thực hiện khác nhau trên phần cứng đồ họa khác nhau (vì nó gọi xuống DirectX nội bộ). Nội dung 2D sẽ tốt trong WPF, ngay cả khi nó hoàn toàn được kết xuất trong phần mềm (nói cách nó sẽ trên một máy ảo) nhưng hoạt hình, 3D chống răng cưa với nhiều yếu tố đòi hỏi sức mạnh GPU thực sự. Khi thời gian di chuyển và phần cứng đồ họa trở nên mạnh mẽ hơn và phổ biến và kiến ​​thức về cách cải thiện hiệu suất WPF, chúng ta sẽ thấy WPF kéo xa hơn (giả sử nó hơi như vậy bây giờ ... đối với một số kịch bản ... đôi khi). Vì vậy, tôi đoán câu trả lời là "nó phụ thuộc".

+0

Tôi muốn nói rằng các đối tượng WPF có xu hướng nhẹ hơn do cơ sở hạ tầng lưu trữ thưa thớt của WPF. Giá trị thuộc tính phụ thuộc chỉ được lưu trữ nếu chúng thay đổi từ giá trị mặc định của chúng, do đó tiết kiệm rất lớn trên bộ nhớ được thực hiện. –

+3

Tôi tò mò và hơi bi quan về hiệu suất trên máy chủ đầu cuối. – Guge

+2

Bạn cũng nên, Guge. WPF gửi đồ họa thay vì các lệnh hoặc mã thông báo gốc đại diện cho các điều khiển. AFAIK, Microsoft cũng không cam kết làm bất cứ điều gì để khắc phục tình trạng này. –

6

WPF sử dụng DirectX để hiển thị (nhanh hơn nhiều) thay vì Windows GDI nguyên gốc.

Như bạn đã biết, Native GDI dựa trên bitmap. Vì WPF dựa trên nền tảng vector, WPF có thể sử dụng hỗ trợ phần cứng theo cách tốt hơn nhiều so với GDI.

Bao giờ, quyết định chọn WPF hoặc Winforms phụ thuộc nhiều vào các yếu tố khác - Tính linh hoạt bạn cần trong giao diện người dùng, mức hỗ trợ phương tiện mà ứng dụng của bạn cần vv. WPF không thay thế cho Winforms không phải là một viên đạn bạc cho tất cả các vấn đề.

Với nhiều tính năng tăng tốc phần cứng sắp ra mắt, WPF có thể cung cấp tốt hơn nhiều so với các ứng dụng Winform của bạn.

Một vài blog thú vị mà tôi đã đọc ealier.

John's Post

Rob's Post

3

Bản vẽ WPF nhanh hơn nhiều, nhưng đối tượng thì nặng hơn. Nếu bạn ném vào 1000 nút riêng biệt, nó sẽ được thu thập thông tin. Mặt khác, các nút này có thể có độ trong suốt và độ dốc phức tạp mà không có hiệu suất đáng kể.

Các vấn đề liên quan