أمثلية الأداء: التصميم و التخطيط
تصميم تطبيق WPF الخاص بك يمكنه أن يؤثر على أدائه عن طريق إنشاء حمل غير ضروري لحساب التخطيط و التحقق من صحة مراجع الكائن. إنشاء الكائنات - خاصةً في وقت التشغيل- يمكن أن يؤثر على مواصفات أداء التطبيق الخاص بك.
هذا الموضوع يوفر نصائح الأداء في هذه النواحي.
تخطيط
يوصف مصطلح "تخطيط المسار" عملية قياس وترتيب أعضاء مجموعة من التوابع المشتقة Panel الخاصة بالكائن و رسمهم على الشاشة. تخطيط المسار هي عملية مكثفة رياضيا — كلما زاد عدد التوابع، زاد عدد العمليات الحسابية المطلوبة. على سبيل المثال، كلما قام كائن UIElement تابع في المجموعة بتغيير موضعه ، يكون لدبه إمكانية أن يشغّل مسار جديد بواسطة نظام التخطيط. بسبب العلاقة الوطيدة بين صفات الكائن وسلوك التخطيط، من المهم فهم أنواع الأحداث التي يمكنها استدعاء نظام التخطيط. أداء التطبيق الخاص بك سيكون أفضل عن طريق تخفيض بقدر الإمكان أي استدعاءات غير ضرورية لتخطيط المسار.
يقوم نظام التخطيط بإكمال مرورين لكل عضو تابع في مجموعة: مسار قياس ، و مسار ترتيب. يوفر كل كائن تابع التطبيق المتجاوز الخاص به لكل من أساليبMeasure و Arrange و ذلك لتوفير سلوك التخطيط المحدد الخاص به. في أبسط صورة، التخطيط هو نظام عودي يؤدي إلى يتم تغيير حجم عنصر، وضع ، و رسم العنصر على الشاشة.
كائن UIElement التابع يبدأ عملية التخطيط بقياس الخصائص الأساسية الخاصة به.
خصائص FrameworkElement الخاصة بالكائن التي تتعلق بالحجم مثل Width ، Height ، و Margin ، يتم تقييمه.
يتم تطبيق منطق Panel-معين مثل خاصية Dock التابعة إلى DockPanel, أو خاصية Orientation التابعة إلى StackPanel.
يتم ترتيب المحتوى أو وضعه بعد قياس جميع الكائنات التابعة.
يتم رسم مجموعة الكائنات التابعة على الشاشة.
عملية تخطيط المسار يتم استدعائها مرة أخرى إذا حدثت أي من الإجراءات التالية:
إضافة كائن تابع إلى المجموعة.
يتم تطبيق LayoutTransform إلى الكائن التابع.
يتم استدعاء أسلوب UpdateLayout للكائن التابع.
عند حدوث تغيير في قيمة الخاصية التبعية التي تعليمها ببيانات التعريف مؤثرة على القياس أو ترتيب المسارات.
استخدم اللوحة الأكثر كفاءة حيث أمكن
تعقيد العملية يعتمد بشكل مباشر على سلوك تخطيط العناصر Panel-مشتق المستخدمة. على سبيل المثال، عنصر تحكم Grid أو StackPanel يوفر وظائف أكثر من عنصر تحكم Canvas. سعر هذه الزيادة في الوظائف هو زيادة أكبر في تكاليف الأداء. ومع ذلك، إذا لم تتطلب الوظيفة التي يوفرها عنصر تحكم Grid يجب استخدام البدائل المكلفة أقل مثل Canvas أو لوحة مخصصة.
لمزيد من المعلومات، راجع نظرة عامة على اللوحات.
تحديث بدلاً من استبدال RenderTransform
قد تتمكن من تحديث Transform بدلاً من استبداله كقيمة لخاصية RenderTransform. هذا بشكل خاص صحيح في السيناريو الذي يتضمن رسم متحرك. عن طريق تحديث Transform موجود، تتجنب بدء العمليات التخطيط الحسابية غير الضرورية.
إنشاء الشجرة الخاصة بك من الأعلى لأسفل
عند إضافة عقدة أو إزالتها من الشجرة المنطقية ، يتم رفع خاصية عدم التحقق على العقدة الأصل و كافة توابعها. كنتيجة ،يجب دوماً اتباع نمط بناء أعلى-أسفل لتجنب تكلفة تطبيق خاصية عدم تحقق غير الضرورية على عقد تم التحقق من صحتها بالفعل. يعرض الجدول التالي الفرق في سرعة التنفيذ بين إنشاء شجرة أعلى لأسفل مقابل أسفل لأعلى حيث أن الشجرة عمقها 150 مستوي و في كل مستوى TextBlockواحد و DockPanel واحد.
Action |
إنشاء الشجرة (مللي ثانية) |
العرض — يتضمن إنشاء الشجرة (مللي ثانية) |
---|---|---|
أسفل لأعلى |
366 |
454 |
أعلى لأسفل |
11 |
96 |
يوضح مثال الرمز التالي كيفية إنشاء شجرة أعلى لأسفل.
Private Sub OnBuildTreeTopDown(ByVal sender As Object, ByVal e As RoutedEventArgs)
Dim textBlock As New TextBlock()
textBlock.Text = "Default"
Dim parentPanel As New DockPanel()
Dim childPanel As DockPanel
myCanvas.Children.Add(parentPanel)
myCanvas.Children.Add(textBlock)
For i As Integer = 0 To 149
textBlock = New TextBlock()
textBlock.Text = "Default"
parentPanel.Children.Add(textBlock)
childPanel = New DockPanel()
parentPanel.Children.Add(childPanel)
parentPanel = childPanel
Next i
End Sub
private void OnBuildTreeTopDown(object sender, RoutedEventArgs e)
{
TextBlock textBlock = new TextBlock();
textBlock.Text = "Default";
DockPanel parentPanel = new DockPanel();
DockPanel childPanel;
myCanvas.Children.Add(parentPanel);
myCanvas.Children.Add(textBlock);
for (int i = 0; i < 150; i++)
{
textBlock = new TextBlock();
textBlock.Text = "Default";
parentPanel.Children.Add(textBlock);
childPanel = new DockPanel();
parentPanel.Children.Add(childPanel);
parentPanel = childPanel;
}
}
للحصول على مزيد من المعلومات حول الشجرة المنطقية، راجع الأشجار فى الWPF.
راجع أيضًا:
المبادئ
أمثلية الأداء: الاستفادة من الأجهزة