سؤال

لدي عرض/صفحة ASP.NET (ديناميكية) تم بناء HTML.RenderPartials المتداخلة. يتم إرسال العرض عرض ViewModel المناسب لتقديمه.

يقول Firebug إن الحصول على استجابة HTML هو 9.89 ثانية مقابل 9.5 كيلو بايت. لمقارنة صفحة الأسئلة الشائعة (HTML ثابتة) من نفس الموقع هو 1.3 ثانية مقابل 17 كيلو.

في البداية اعتقدت أنه كان كيان SQL في النهاية يبطئ الأمور بسبب تعقيد ViewModel ، لكن يبدو أنه يبني عرض ViewModel في أقل من 1 ثانية وفقًا لسجلاتي.

أي أفكار لماذا تستغرق عرض MVC وقتًا طويلاً لتقديمها من فضلك وكيف يمكنني تسريع هذا الأمر؟ أنا أفكر في التحميل الجزئي عبر Ajax.

(راجع للشغل I Gzip واستخدم CDN وما إلى ذلك - لقد قمت بتشويش الموقع بأكمله حتى الموت)

يحرر:

أجهزة ضبط الوقت المضافة (ساعة توقيت) إلى onactionexecuting/onActionExecuted و onResultExecuting/onResultExecected.

09/12/2010 18:39:20: وحدة التحكم: ملف التعريف: الفهرس المنقضي الوقت: 680.6431 - عمل

09/12/2010 18:39:29: وحدة التحكم: ملف التعريف: الفهرس المنقضي الوقت: 9202.063 - نتيجة

9 ثوان بالنسبة للإطار لتقديم العرض.

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

المحلول

تم حل المشكلة

أولاً ، شكرًا لكم جميعًا على اقتراحاتك. تابعت كل اقتراح مرارًا وتكرارًا حتى وجدت المشكلة. هذا هو الخطأ ، وربما يمكن لشخص ما توضيحه للآخرين.

كان VS2010 Performance Wizard يقول إن كل كائن يتم نقله إلى PartialViews كان يأخذ وقتًا ضخمًا من وحدة المعالجة المركزية وافترضت أن يكون جزئيًا كما قرأت أنهم قد يواجهون مشاكل.

foreach (ProfileComment item in Model)
{
    Html.RenderPartial("UserActivityComment", item);
}
...
Friends friend = Model.Friends.Where(e => e.ID == activity.ActionID).FirstOrDefault();
if (friend.FriendsProfile.UserName != Page.User.Identity.Name)
{
    Html.RenderPartial("UserActivityFriend.ascx", friend);
}

يعد كائن ProfileComment و Friends (بالإضافة إلى الآخرين) جزءًا من ViewModel أقوم بإنشائه ونمره إلى الصفحة. الآن يتم إنشاء VM عبر إطار الكيان في أقل من 0.3 ثانية ، لذلك افترضت أن كل شيء على ما يرام مع VM.

جاء التأخير الضخم عندما أردت منظر معالجته. تم وضع علامة على النموذج في "for loop" ، وكذلك تم وضع FirstorDefault بواسطة معالج الأداء.

حسنًا ، يتم بناء النموذج بسرعة ولكن لم يتم معالجته بسرعة. المحلول:

_entities.Friends.MergeOption = MergeOption.NoTracking;
_entities.ProfileComment.MergeOption = MergeOption.NoTracking;

أعتقد أن القضية كانت تستخرج الكائن من VM لإرسالها إلى الجزئي لأنها كانت ترغب أيضًا في الحفاظ على إدارة الكيانات للعلاقات.

مزيد من المعلومات في AIA Research

و blogs.microsoft.co.il/blogs/gilf/archive/2009/02/20/disabling-change-tracking-in-entity-framework.aspx

لا تتردد في التوسع في هذا بمزيد من التفصيل. راجع للشغل كانت زيادة الأداء تسربت!

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