سؤال

أحاول اتخاذ قرار بشأن كيفية عرض بياناتي. ما لدي الآن هو قائمة المنتجات المعروضة في مكرر. ولكن بالنسبة لصيانة الكود ، وضعت عناصر المنتج الخاصة بي في جهاز UserControl منفصل وتحميلها في حلقة مع نتائج DB باستخدام LoadControl.

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

لذلك ، هل هو حقاً ضربة ناجحة باستخدام هذه الطريقة أم أنها على ما يرام مع حوالي 10.000 زيارة في اليوم. أي اقتراحات أخرى مرحب بها أيضًا.

هل كانت مفيدة؟

المحلول

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

لقد اختبرت إنشاء 100000 حالة من فئة بسيطة مع خاصية واحدة مقابل 100000 حالة من LoadControl تحميل تحكم فارغ جديد. وكان 16 مللي ثانية للفئات مقابل 1950ms للتحكم في الحمل. يبدو أن هناك الكثير من النفقات العامة. لقد لاحظت أنه إذا أضفت أكثر عناصر تحكم مكونة إلى المستخدم تحكم في وقت التحميل. (هذا هو مجرد الحمل لم أضف عناصر التحكم في الصفحة أو عرضها)

هل يكفي أن تكون ملحوظة للمستخدم؟ ربما لا إلا إذا كنت تقوم بتحميل كمية كبيرة من الحالات باستخدام LoadControl.

نصائح أخرى

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

ومع ذلك ، فأنت بالفعل جزئيًا حيث تحتاج إلى أن تكون لاقتراري.

لماذا لا تصنع فصلًا لمنتجك ، مع جميع الخصائص التي حددتها بالفعل على عنصر تحكم المستخدم الخاص بك.

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

عندما تستخدم Page.LoadControl ضمن حلقة ، افصلها في وظيفتها الخاصة وهذا سيخبر ASP.Net لتخزين عنصر التحكم بدلاً من تحميله من القرص في كل مرة.

مثال: (VB)

Private Function LoadMyControl() As myCustomControl1
    Return Page.LoadControl("....")
End Function

ثم...

For each [....]
   Dim myCtrl1 as myCustomControl1 LoadMyControl()
   myCtrl1.prop1 = "blah"
   myPlaceholder1.Controls.Add(myCtrl1)
Next

من خلال تغليفه داخل وظيفة ، يعتقد محرك ذاكرة التخزين المؤقت أنه نفس عنصر تحكم المستخدم (وهو) وسيقوم فقط بالوصول إلى القرص مرة واحدة ، مما يؤدي إلى تسريعه بشكل كبير.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top