أمثلية الأداء: موارد التطبيق

يسمح لك WPF بمشاركة موارد التطبيق بحيث يمكنك اعتماد مظهر أو سلوك دائم عبر عناصر عدة متشابهة. يوفر هذا الموضوع بعض التوصيات في هذا الموضوع التي يمكنها أن تساعدك في تحسين أداء التطبيقات.

لمزيد من المعلومات راجع نظرة عامة حول الموارد

مشاركة الموارد

إذا كان التطبيق يستخدم عناصر تحكم مخصصة ويقوم بتعريف موارد في ResourceDictionary (أو نقطة موارد XAML ) ، فمن المستحسن أن تقوم إما بتعريف الموارد في Application أو على مستوى الكائن Window أو تعريفهم في السمة الافتراضية لـعناصر التحكم المخصصة. يفرض تعريف الموارد في عناصر التحكم المخصصة ResourceDictionary تأثير على أداء كل مثيل من عنصر التحكم هذا. على سبيل المثال، إذا كان لديك عمليات الفرشاة المكثفة الأداء معرفة كجزء من تعريف الموارد الخاصة بعنصر تحكم مخصص والعديد من المثيلات لعنصر التحكم المخصص، مجموعة العمل للتطبيق سوف تزيد بشكل ملحوظ.

لتوضيح هذه النقطة يجب مراعاة ما يلي. لنفترض أنه يتم تطوير لعبة كروت باستخدام WPF. معظم ألعاب الكروت تحتاج 52 كارت مع 52 رسمة مختلفة. قررت تطبيق عنصر تحكم فى الكارت كما قمت بتعريف 52 فرشاة (كل تمثل وجه بطاقة) في موارد عنصر تحكم البطاقة. في التطبيق الرئيسي الخاص بك تبدأ في إنشاء 52 مثيلات من مثيلات عنصر التحكم لهذه البطاقة. ينشئ كل مثيل من عنصر التحكم المخصص للبطاقة 52 مثيل من الكائنات Brush التي تمنحك إجمالي 52 * 52 كائنات Brush في التطبيق الخاص بك. عن طريق تحريك الفرشاة خارج موارد عنصر التحكم المخصص للبطاقة Application أو على مستوى الكائن Window أو تعريفهم في السمة الافتراضية لـعنصر التحكم المخصص، يؤدى الى تقليل مجموعة عمل الخاصة بالتطبيق، حيث يتم الآن مشاركة 52 فرشاة بين 52 مثيلات من عنصر تحكم البطاقة.

مشاركة فرشاة دون نسخ

إذا كان لديك عدة عناصر باستخدام نفس الكائن Brush قم بتعريف الفرشاة كمورد وقم بالإشارة إليها بدلاً من تعريف الفرشاة ككائن مضمن في XAML. هذا الأسلوب سيقوم بإنشاء مثيل واحد ثم قم بإعادة استخدامه، بينما تعريف الفرش ككائنات مضمنة في XAML يقوم بإنشاء مثيل جديد لكل عنصر.

نموذج العلامات التالي يوضح هذه النقطة:

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

استخدام موارد ثابتة عندما يكون ذلك ممكناً

يوفر المورد الثابت قيمة لأي سمة خاصية XAML بواسطة البحث عن مرجع لمورد معرف مسبقاً. يماثل سلوك البحث عن ذلك المورد وقت التحويل البرمجي للبحث.

من ناحية أخرى سيتم إنشاء تعبير مؤقت أثناء التحويل البرمجي الأولي فى حالة المورد الديناميكى ،وبالتالى تأجيل البحث عن موارد حتى تكون هناك فعلية لقيمة المورد من أجل بناء الكائن. يماثل سلوك البحث عن ذلك المورد وقت التشغيل للبحث مما يفرض تأثير على الأداء. قم باستخدام موارد ثابتة كلما أمكن ذلك في التطبيق الخاص بك. استخدام الموارد الديناميكية يكون فقط عند الضرورة.

يبين نموذج العلامات التالي استخدام كلا النوعين من الموارد:

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

راجع أيضًا:

المبادئ

تحسين أداء تطبيق WPF

التخطيط لأداء التطبيق

أمثلية الأداء: الاستفادة من الأجهزة

أمثلية الأداء: التصميم و التخطيط

أمثلية الأداء: الرسومات ثنائية الأبعاد و التصوير

أمثلية الأداء: سلوك كائن

أمثلية الأداء: Text

أمثلية الأداء: ربط البيانات.

أمثلية الأداء: توصيات أخرى

أدوات الأداء WPF و الموارد