2011-07-30 6 views
8

In WPF do DependencyProperty causa un sacco di box/unboxing se utilizzato con i tipi di valore? Oppure l'implementazione spiega come evitare questo e non i tipi di valore box/unbox? È così come lo fanno?In WPF do DependencyProperty causa un sacco di box/unboxing se utilizzato con i tipi di valore?

Penso che i tipi di valore siano uno dei principali casi di utilizzo di DependencyPropertys.

Grazie

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

risposta

9

La risposta breve è sì.

La memoria di sottolineatura per i valori di proprietà di dipendenza non ha una nozione di tipi di valore e archivia tutto come oggetto, che causerà la boxe. Lo stesso framework utilizza un "trucco intelligente" per l'ottimizzazione dello storage delle proprietà booleane tramite una classe helper BooleanBox, che ha valori veri e falsi memorizzati come oggetti box.

In generale, se si dispone di alcune proprietà personalizzate, non si ha nulla di cui preoccuparsi. Tuttavia, se hai una scena complessa con migliaia di oggetti di dipendenza personalizzati che volano intorno a te, potresti voler pensare alle ottimizzazioni delle prestazioni di boxe/unboxing.

1

Sarà probabilmente utilizzare la boxe, ma come questo è facile da scala non dovrebbe accadere su una scala che sarebbe un problema.

Si noti che molto spesso viene coinvolto anche un convertitore.

2

In aggiunta alle altre risposte:

Quando WPF legge o modifica una proprietà di dipendenza (vincolanti e animazione) non fa uso di queste setter e getter. Quindi la (dis) boxe che stai mostrando nel codice non verrà eseguita.

Questi setter e getters che stai mostrando sono per noi, sviluppatori.