Các bảng bạn đề cập là các bảng Bố cục, do đó, tổng quan ngắn gọn về hệ thống bố cục cho thấy có thể nó sẽ không chỉ là một danh sách đơn giản của bảng hiệu quả nhất mà là cách bạn sử dụng các bảng có ảnh hưởng lớn nhất đến hiệu quả và hiệu suất.
Giao diệnSystem_Overview :
Đơn giản nhất, bố cục là một hệ thống đệ quy dẫn đến một yếu tố có kích thước, vị trí và được vẽ. Cụ thể hơn, bố cục mô tả quá trình đo lường và sắp xếp các thành viên của bộ sưu tập Trẻ em của thành phần Bảng điều khiển. Bố cục là một quá trình chuyên sâu. Bộ sưu tập Trẻ em càng lớn, số lượng tính toán phải thực hiện càng nhiều. Độ phức tạp cũng có thể được giới thiệu dựa trên hành vi bố trí được xác định bởi thành phần Bảng điều khiển sở hữu bộ sưu tập. Một Bảng tương đối đơn giản, chẳng hạn như Canvas, có thể có hiệu suất tốt hơn đáng kể so với Bảng phức tạp hơn, chẳng hạn như Lưới.
Mỗi khi một đứa trẻ UIE bổ sung thay đổi vị trí của nó, nó có khả năng kích hoạt một đường chuyền mới bằng hệ thống bố trí. Do đó, điều quan trọng là phải hiểu các sự kiện có thể gọi hệ thống bố trí, vì việc gọi không cần thiết có thể dẫn đến hiệu suất ứng dụng kém. Dưới đây mô tả quá trình xảy ra khi hệ thống bố trí được gọi.
1. Một UIEuity con bắt đầu quá trình bố trí bằng cách trước tiên có các thuộc tính cốt lõi của nó được đo.
2. Các thuộc tính kích thước được xác định trên FrameworkEuity được đánh giá, chẳng hạn như Chiều rộng, Chiều cao và Ký quỹ.
3. Logic dành riêng cho bảng điều khiển được áp dụng, chẳng hạn như hướng Dock hoặc Định hướng xếp chồng.
4. Nội dung được sắp xếp sau khi tất cả trẻ em đã được đo.
5. Bộ sưu tập Trẻ em được vẽ trên màn hình.
6. Quá trình được gọi lại nếu Trẻ em bổ sung được thêm vào bộ sưu tập, Giao diện bố cục được áp dụng hoặc phương thức UpdateLayout được gọi.
Xem LayoutSystem_Measure_Arrange để biết thêm thông tin về việc đo lường và sắp xếp trẻ em
LayoutSystem_Performance :
Bố cục là một quá trình đệ quy. Mỗi phần tử con trong bộ sưu tập Trẻ em được xử lý trong mỗi lần gọi hệ thống bố trí. Do đó, nên tránh kích hoạt hệ thống bố trí khi không cần thiết. Những cân nhắc sau đây có thể giúp bạn đạt được hiệu suất tốt hơn.
Lưu ý rằng những thay đổi giá trị thuộc tính sẽ buộc cập nhật đệ quy bởi hệ thống bố trí.
Các thuộc tính phụ thuộc có giá trị có thể khiến hệ thống bố trí được khởi tạo được đánh dấu bằng các cờ công khai. AffectsMeasure và AffectsArrange cung cấp manh mối hữu ích về việc thay đổi giá trị thuộc tính sẽ buộc cập nhật đệ quy bởi hệ thống bố trí. Nói chung, bất kỳ thuộc tính nào có thể ảnh hưởng đến kích thước của hộp giới hạn của một thành phần nên được đặt cờ AffectsMeasure thành đúng. Để biết thêm thông tin, xem Tổng quan về thuộc tính phụ thuộc.
Khi có thể, hãy sử dụng RenderTransform thay vì LayoutTransform.
Một LayoutTransform có thể là một cách rất hữu ích để ảnh hưởng đến nội dung của giao diện người dùng (UI). Tuy nhiên, nếu hiệu ứng của biến đổi không phải tác động đến vị trí của các phần tử khác, tốt nhất là sử dụng RenderTransform thay thế, vì RenderTransform không gọi hệ thống bố cục. LayoutTransform áp dụng chuyển đổi của nó và buộc cập nhật bố cục đệ quy để giải thích cho vị trí mới của phần tử bị ảnh hưởng.
Tránh các cuộc gọi không cần thiết đến UpdateLayout.
Phương thức UpdateLayout buộc cập nhật bố cục đệ quy và thường không cần thiết. Trừ khi bạn chắc chắn rằng cần phải cập nhật đầy đủ, hãy dựa vào hệ thống bố trí để gọi phương thức này cho bạn.
Khi làm việc với bộ sưu tập Trẻ em lớn, hãy cân nhắc sử dụng VirtualizingStackPanel thay vì StackPanel thông thường.
Bằng cách ảo hóa bộ sưu tập con, VirtualizingStackPanel chỉ giữ các đối tượng trong bộ nhớ hiện nằm trong ViewPort của cha mẹ. Kết quả là, hiệu suất được cải thiện đáng kể trong hầu hết các kịch bản.
Tối ưu hóa hiệu suất: Bố cục và thiết kế : Bài viết này đi sâu vào chi tiết về cách xây dựng cây hiệu quả và đưa ra một danh sách đơn giản các bảng điều khiển dựa trên độ phức tạp của chúng
Canvas (ít phức tạp nhất = hiệu quả hơn và hiệu suất tốt hơn)
Lưới
Các bảng khác (phức tạp hơn = hiệu quả kém hơn và hiệu suất kém hơn)
Các cân nhắc về hiệu suất khác cần chú ý: Cách cải thiện tốc độ kết xuất UI WPF
- Cache mọi thứ. Bàn chải, màu sắc, hình học, văn bản định dạng, Glyphs. .
- Freeze Freezable, nếu bạn dự định sử dụng nó trong một thời gian dài. Đặc biệt là hình học. Hình học không phức tạp thực hiện HitTest cực kỳ chậm.
- Chọn cách nhanh nhất để kết xuất của mỗi nguyên thủy. Ví dụ: có khoảng 6 cách hiển thị văn bản, nhưng nhanh nhất là DrawContext.DrawGlyphs.
- Cho phép tái chế container. Ảo hóa mang lại rất nhiều cải tiến hiệu suất, nhưng các container sẽ được xử lý và tạo lại, đây là mặc định. Nhưng bạn có thể đạt được hiệu suất cao hơn bằng cách tái chế các thùng chứa bằng cách đặt VirtualizingStackPanel.VirtualizationMode = "Tái chế"
- Từ đây : Không có giới hạn thực tế nào cho số lượng lồng mà ứng dụng của bạn có thể hỗ trợ, tuy nhiên, nói chung, tốt nhất là giới hạn ứng dụng của bạn chỉ sử dụng những bảng thực sự cần thiết cho bố cục mong muốn của bạn. Trong nhiều trường hợp, một phần tử Grid có thể được sử dụng thay cho các bảng lồng nhau do tính linh hoạt của nó như là một thùng chứa bố cục. Điều này có thể tăng hiệu suất trong ứng dụng của bạn bằng cách giữ các yếu tố không cần thiết ra khỏi cây.