2011-07-30 7 views
8

En WPF do DependencyProperty causa un montón de boxeo/unboxing cuando se usa con tipos de valor? ¿O la implementación de algún modo previene esto y no los tipos de valor de box/unbox? Entonces, ¿cómo hacen esto?En WPF do DependencyProperty causa un montón de boxeo/unboxing cuando se usa con tipos de valor?

Creo que los tipos de valor son un caso de uso importante para DependencyPropertys.

Gracias

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)); 

Respuesta

9

La respuesta corta es sí.

El almacenamiento de subrayado para valores de propiedad de dependencia no tiene una noción de tipos de valores y almacena todo como un objeto, lo que provocará el encajamiento. El marco utiliza un "truco inteligente" para la optimización de almacenamiento de propiedades booleanas a través de una clase auxiliar BooleanBoxes, que tiene valores verdaderos y falsos almacenados como objetos encuadrados.

En general, si tiene algunas propiedades personalizadas, no tiene de qué preocuparse. Sin embargo, si tiene una escena compleja que tiene miles de objetos de dependencia personalizados volando, es posible que desee pensar en las optimizaciones de rendimiento de boxeo/desempaquetado.

1

Es probable que utilice el boxeo, pero como este es que no debería ocurrir en una escala que sería un problema a escala por el usuario.

Tenga en cuenta que con bastante frecuencia también participará un convertidor.

2

Además de las otras respuestas:

Cuando WPF lee o modifica una propiedad de dependencia (la unión y animación) que no utiliza estos setters y getters. Por lo tanto, el (des) boxeo que está mostrando en el código no se ejecutará.

Estos setters y getters que está mostrando son para nosotros, desarrolladores.

Cuestiones relacionadas