سؤال

أنا جديد إلى حد ما على .NET Development بشكل عام. أرغب في القيام ببعض الأجهزة على تطبيق الويب الخاص بي لضبط الأداء ، خاصة فيما يتعلق بالتخزين المؤقت. لقد كتبت الكثير من UserControls التي تم إنشاؤها ديناميكيًا والتي أرغب في تجربة التخزين المؤقت بطرق مختلفة-بشكل كبير عن طريق إعلان صفحة ASPX أو برمجيًا.

لديّ أيضًا الكثير من استعلامات Oracle التي تعتمد على بعضها البعض وأود أن أتطلع إلى تخزين المؤقتة لأولئك لمعرفة ما سيوفر أفضل مكاسب الأداء.

ما هي أفضل طريقة للقيام بهذا؟ بطريقة ما ، لا أعتقد أن استخدام ساعة توقيت لمعرفة المدة التي تستغرقها IE في الصفحة لتحميلها هي أفضل فكرة. لن يكون لدي أي فكرة عما إذا كان التخزين المؤقت قد أصيب بالضرب أو ضعيه جانباً عن التأخير المتصور. هل لدى VS2008 أدوات مدمجة للمساعدة؟

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

المحلول

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

لقد فعلت ذلك من خلال مركزية استعلامات SQL في طريقة التفاف لأنواع 3 من طرق SQL التي استخدمناها:

  • تنفيذ الاستعلام
  • تنفيذ غير سؤال
  • executescalar

لقد استخدموا فئة ساعة التوقيت ، ولكن كان هناك أيضًا رمز لتحويل الاستعلام إلى عبارة SQL ، على غرار تلك التي شوهدت في SQL Server Profiler.

كانت كل طريقة مماثلة لما يلي:

protected static object ExecuteScalar(SqlCommand comm, SqlParameter[] sqlParameters)
{
    Stopwatch st = new Stopwatch();
    bool errorDetected = false;

    try
    {
         comm.Parameters.Add(sqlParameters);

         using(comm)
         {
              st.Start();
              object returnValue = comm.ExecuteScalar();
              st.Stop();
              return returnValue;
         }
    }
    catch(Exception)
    {
         errorDetected = true;
         st.Stop();
         throw;
    }
    finally
    {
         string output = GetSqlStringForParameters(sqlParameters,st.Elapsed,QueryType.Scalar);

         if(errorDetected)
         {
              Debug.WriteLine("/*SQL (Errored)*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
         else
         {
              Debug.WriteLine("/*SQL*/" + output,"DataAccess.SqlAdapter.ExecuteScalar");
         }
    } 
}

هذا من شأنه أن يخرج عبارات SQL الخاصة بنا في debugview.exe مثل هذا:

/*SQL*/ exec spsGetOrder @OrderNumber='234567' -- Rows returned = 1 ;  1 params |--> completed NonQuery in 0.0016144 seconds. 

جمال هذا هو أنه على الرغم من أن هناك عنق الزجاجة لهذه العبارات ، يمكننا لصق الاستعلام مباشرة في SQL Profiler والحصول على إخراج الاستعلام. هذا يعني أيضًا أنه إذا كان لديك أداة لعرض ملفات السجل ، فيمكنك استخدام تعبيرات منتظمة لمراقبة المكان الذي يستغرقه الوقت في نطاق معين.

لذلك إذا كنت ترغب في البحث عن استفسارات تأخذ أكثر من 0.5 ثانية ، فيمكنك البحث عن المصطلح:

"في 0. [5-9] d+" <-كل شيء أكبر من 0.5 ثانية أو "في [1-9]. d+" <-كل شيء أكبر من ثانية واحدة

وقد ساعدنا هذا على تركيز جهودنا بشكل كبير. كما أنه يساعدنا في تحديد ما إذا كانت المشكلة تتعلق بقاعدة البيانات ، أو كما هو موضح أعلاه ، مشكلة ASP.NET.

أخيرًا ، هناك أداة تسمى العابث والتي يمكن أن تساعدك أيضًا على تشخيص الصفحات عند وصولها إلى جهاز الكمبيوتر الخاص بك. يمنحك هذا معلومات مثل حجم الملف ، والمراجع إلى الصور/CSS ، وأوقات التنزيل. هذا أيضًا مفيد جدًا مثل تشخيص مشكلات حجم ViewState.

آمل أن يساعد هذا

نصائح أخرى

الطريقة التي أقترب بها عادةً ما عن طريق تمكين ASP.NET تتبع. هناك دليل جيد للتمكين هذه هنا. إنه مفصل تمامًا وأفضل ما هو مجاني.

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

جزء اختبار Perf من استخدام ASP.NET تتبع هو في الحقيقة مجرد دليل لأنه لا يمكن تكراره بسهولة ، ولكنه جيد لا شيء. إذا كنت ترغب في زيادة الأمر ، فهناك أدوات في نظام فريق Visual Studio 2008 قد يكون أفضل (على الرغم من أنني لم أستخدمها). هناك ايضا Jetbrains dottrace و النمل البارد.

AppDynamics هو شاشة أداء جيدة جدًا للتطبيق ، والتي يمكن أن تؤدي إلى أجهزة تطبيقات .NET بدون تكوين. أعتقد أن يمكن أن تسخن مشكلتك في هذه الأداة. http://www.appdynamics.com/

لقد مررت بتجارب جيدة مع بقايا جديدة. تثبيت بسيط للغاية ، لوحة معلومات واضحة للغاية على موقعهم ، وإذا صادفت أن تستضيف على السحب Rackspace أو Amazon ، فإنها عادة ما تقدم ترقيات مجانية لحسابات المحترفين. تحقق من الخروج!

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