أقسام الوصول السريع (مربع البحث)

سر كشف مهندس مايكروسوفت لتباطؤ دخول ويندوز 7 بالخلفيات!

سر كشف مهندس مايكروسوفت لتباطؤ دخول ويندوز 7 بالخلفيات!



منذ أسبوع، قمنا بنشر تقرير عن كيفية تسبب ويندوز 11 في إعادة ظهور خلل عمره 20 سنة في لعبة GTA San Andreas من خلال تغيير تعامل النظام مع الذاكرة، مما كشف عن خطأ قديم في شيفرة اللعبة. يبدو أن ويندوز قد أظهر على مر السنين سلوكيات غريبة وخفية، وقد ألقى توضيح حديث من مهندس مخضرم في مايكروسوفت الضوء على مثال تاريخي آخر مثير للاهتمام.

في عام ٢٠٠٩، ومع طرح ويندوز ٧ تقريبا، رصد أعضاء منتدى نيووين وعدد من المستخدمين مشكلة محيرة: حيث كانت شاشة الترحيب تحتاج أحيانا إلى وقت طويل، يصل إلى ٣٠ ثانية، قبل أن تختفي بعد تسجيل الدخول. وكان هذا التأخير مرتبطا بخيار بسيط لتحديد لون ثابت كخلفية سطح المكتب. وأكدت مقالة دعم من مايكروسوفت لاحقا وجود هذه المشكلة لدى مستخدمي ويندوز ٧ وويندوز سيرفر ٢٠٠٨ R2 الذين يستخدمون خلفيات ذات ألوان ثابتة.

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


يفسر تشين أن سبب التأخير البالغ 30 ثانية يعود لعدم إرسال أحد المكونات إشارة "الاستعداد". يوضح ذلك من خلال مثال بسيط لكيفية ظهور رمز تحميل خلفية الشاشة:



  
InitializeWallpaper()
{
    if (wallpaper bitmap defined)
    {
        LoadWallpaperBitmap();
    }
}

LoadWallpaperBitmap()
{
    locate the bitmap on disk
    load it into memory
    paint it on screen
    Report(WallpaperReady);
}


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




  
// Original code
InitializeDesktopIcons()
{
    bind to the desktop folder
    enumerate the icons
    add them to the screen
    Report(DesktopIconsReady);
}

// Updated with group policy support

InitializeDesktopIcons()
{
    if (desktop icons allowed by policy)
    {
        bind to the desktop folder
        enumerate the icons
        add them to the screen
        Report(DesktopIconsReady);
    }
}


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

 وفقا لمقالة دعم Microsoft، تم إصدار إصلاح فوري لحل هذه المشكلة لنظامي التشغيل Windows 7 وWindows Server 2008 R2 في نوفمبر 2009.

تعليقات



    كود مشغل الصوت ------------ ------- ads