Bagikan melalui


Mengoptimalkan Performa: Sumber Daya Aplikasi

WPF memungkinkan Anda berbagi sumber daya aplikasi sehingga Anda dapat mendukung tampilan atau perilaku yang konsisten di seluruh elemen yang ditik serupa. Topik ini memberikan beberapa rekomendasi di area ini yang dapat membantu Anda meningkatkan performa aplikasi Anda.

Untuk informasi selengkapnya tentang sumber daya, lihat Sumber Daya XAML.

Berbagi sumber daya

Jika aplikasi Anda menggunakan kontrol kustom dan menentukan sumber daya dalam ResourceDictionary simpul (atau Sumber Daya XAML), disarankan agar Anda menentukan sumber daya di Application tingkat objek atau Window , atau menentukannya dalam tema default untuk kontrol kustom. Menentukan sumber daya dalam kontrol ResourceDictionary kustom memberlakukan dampak performa untuk setiap instans kontrol tersebut. Misalnya, jika Anda memiliki operasi sikat intensif performa yang didefinisikan sebagai bagian dari definisi sumber daya kontrol kustom dan banyak instans kontrol kustom, set kerja aplikasi akan meningkat secara signifikan.

Untuk mengilustrasikan poin ini, pertimbangkan hal berikut. Katakanlah Anda mengembangkan permainan kartu menggunakan WPF. Untuk sebagian besar permainan kartu, Anda memerlukan 52 kartu dengan 52 wajah yang berbeda. Anda memutuskan untuk menerapkan kontrol kustom kartu dan Anda menentukan 52 kuas (masing-masing mewakili wajah kartu) dalam sumber daya kontrol kustom kartu Anda. Di aplikasi utama, Anda awalnya membuat 52 instans kontrol kustom kartu ini. Setiap instans kontrol kustom kartu menghasilkan 52 instans Brush objek, yang memberi Anda total 52 * 52 Brush objek dalam aplikasi Anda. Dengan memindahkan kuas dari sumber daya kontrol kustom kartu ke Application tingkat objek atau Window , atau menentukannya dalam tema default untuk kontrol kustom, Anda mengurangi set aplikasi yang berfungsi, karena Anda sekarang berbagi 52 kuas di antara 52 instans kontrol kartu.

Berbagi Kuas tanpa Menyalin

Jika Anda memiliki beberapa elemen menggunakan objek yang sama Brush , tentukan kuas sebagai sumber daya dan referensikan, daripada mendefinisikan kuas sebaris di XAML. Metode ini akan membuat satu instans dan menggunakannya kembali, sedangkan menentukan kuas sebaris di XAML membuat instans baru untuk setiap elemen.

Sampel markup berikut mengilustrasikan poin ini:

<StackPanel.Resources>
  <LinearGradientBrush x:Key="myBrush" StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
    <LinearGradientBrush.GradientStops>
      <GradientStopCollection>
        <GradientStop Color="GoldenRod" Offset="0" />
        <GradientStop Color="White" Offset="1" />
      </GradientStopCollection>
    </LinearGradientBrush.GradientStops>
  </LinearGradientBrush>
</StackPanel.Resources>

<!-- Non-shared Brush object. -->
<Label>
  Label 1
  <Label.Background>
    <LinearGradientBrush StartPoint="0,0.5" EndPoint="1,0.5" Opacity="0.5">
      <LinearGradientBrush.GradientStops>
        <GradientStopCollection>
          <GradientStop Color="GoldenRod" Offset="0" />
          <GradientStop Color="White" Offset="1" />
        </GradientStopCollection>
      </LinearGradientBrush.GradientStops>
    </LinearGradientBrush>
  </Label.Background>
</Label>

<!-- Shared Brush object. -->
<Label Background="{StaticResource myBrush}">Label 2</Label>
<Label Background="{StaticResource myBrush}">Label 3</Label>

Gunakan Sumber Daya Statis jika Memungkinkan

Sumber daya statis menyediakan nilai untuk atribut properti XAML apa pun dengan mencari referensi ke sumber daya yang sudah ditentukan. Perilaku pencarian untuk sumber daya tersebut dianalogikan dengan pencarian waktu kompilasi.

Sumber daya dinamis, di sisi lain, akan membuat ekspresi sementara selama kompilasi awal dan dengan demikian menunggak pencarian sumber daya sampai nilai sumber daya yang diminta benar-benar diperlukan untuk membangun objek. Perilaku pencarian untuk sumber daya tersebut dianalogikan dengan pencarian run-time, yang memberlakukan dampak performa. Gunakan sumber daya statis jika memungkinkan dalam aplikasi Anda, menggunakan sumber daya dinamis hanya jika diperlukan.

Sampel markup berikut menunjukkan penggunaan kedua jenis sumber daya:

<StackPanel.Resources>
  <SolidColorBrush x:Key="myBrush" Color="Teal"/>
</StackPanel.Resources>

<!-- StaticResource reference -->
<Label Foreground="{StaticResource myBrush}">Label 1</Label>

<!-- DynamicResource reference -->
<Label Foreground="{DynamicResource {x:Static SystemColors.ControlBrushKey}}">Label 2</Label>

Baca juga