2011-07-30 8 views
8

Trong WPF, DependencyProperty có gây ra rất nhiều cú đấm/unboxing khi được sử dụng với các loại giá trị không? Hoặc thực hiện một số cách để ngăn chặn điều này và không phải loại hộp/giá trị unbox? Vậy làm thế nào để họ làm điều này?Trong WPF làm DependencyProperty gây ra rất nhiều boxing/unboxing khi được sử dụng với các loại giá trị?

Tôi nghĩ loại giá trị là trường hợp sử dụng chính cho DependencyPropertys.

Cảm ơn

public double Price 
    { 
     get { return (double)GetValue(PriceProperty); } 
     set { SetValue(PriceProperty, value); } 
    } 


    public static readonly DependencyProperty PriceProperty = 
     DependencyProperty.Register("Price", typeof(double), typeof(Quote), new UIPropertyMetadata(0.0d)); 

Trả lời

9

Câu trả lời ngắn gọn là có.

Lưu trữ gạch chân cho các giá trị thuộc tính phụ thuộc không có khái niệm về các loại giá trị và lưu trữ mọi thứ dưới dạng đối tượng, điều này sẽ gây ra quyền anh. Bản thân khung công tác sử dụng một 'mẹo thông minh' để tối ưu hóa lưu trữ thuộc tính Boolean thông qua một lớp trợ giúp BooleanBoxes, có các giá trị đúng và sai được lưu trữ như các đối tượng đóng hộp.

Nói chung, nếu bạn có một vài thuộc tính tùy chỉnh, bạn không có gì phải lo lắng. Tuy nhiên nếu bạn có một cảnh phức tạp có hàng ngàn đối tượng phụ thuộc tùy chỉnh của bạn đang bay xung quanh bạn có thể muốn suy nghĩ về tối ưu hóa hiệu suất boxing/unboxing.

1

Nó có thể sẽ sử dụng quyền anh, nhưng vì đây là người dùng có quy mô nó không nên xảy ra trên thang điểm từ đó sẽ là một vấn đề.

Lưu ý rằng thường thì Người chuyển đổi cũng sẽ tham gia.

2

Bên cạnh những câu trả lời khác:

Khi WPF đọc hoặc thay đổi thuộc tính phụ thuộc (ràng buộc và hoạt hình) nó không sử dụng những setters và thu khí. Vì vậy, (un) boxing bạn đang hiển thị trong mã sẽ không được thực hiện.

Những người định cư và getters bạn đang hiển thị là dành cho chúng tôi, nhà phát triển.