Windows 7 اگر پسزمینه یکرنگ داشتید، خیلی طول میکشید تا بارگیری شود. حالا میدانیم چرا.
به گزارش اپست به نقل از pcworld ، ویندوز ۷ در سال ۲۰۰۹ به بازار عرضه شد و پس از شکستهای آزاردهنده ویندوز ویستا، مایکروسافت را دوباره در مسیر موفقیت قرار داد. اما ویندوز ۷ نیز بدون نقص نبود، همانطور که این داستان جالب ثابت میکند.
برخی از کاربران ظاهراً در آن زمان با مشکل آزاردهندهای مواجه بودند: اگر یک تصویر تکرنگ را به عنوان پسزمینه تنظیم میکردند، رایانه شخصی ویندوز ۷ آنها همیشه ۳۰ ثانیه طول میکشید تا سیستم عامل راهاندازی شود و از صفحه خوشآمدگویی به دسکتاپ برود.
در یک پست وبلاگ اخیر، ریموند چن، کهنه کار مایکروسافت، دلیل دقیق این موضوع را توضیح می دهد. به گفته او، یک اشتباه برنامه نویسی ساده باعث شد که کاربران مدت بیشتری برای بوت شدن سیستم منتظر بمانند. پس از ورود به سیستم، ویندوز ۷ ابتدا دسکتاپ را تکه تکه راه اندازی می کرد، یعنی نوار وظیفه، پنجره دسکتاپ، آیکون های برنامه ها و حتی تصویر پس زمینه.
سیستم با صبر و حوصله منتظر می ماند تا تمام اجزا بارگیری شوند و از هر جزء جداگانه بازخورد دریافت می کرد. یا اگر هیچ بازخوردی دریافت نمی کرد، پس از ۳۰ ثانیه از صفحه خوش آمدگویی به دسکتاپ می رفت.
مشکل این بود: کد مربوط به پیامی که نشان میداد تصویر پسزمینه آماده است، درون کد بیتمپ تصویر پسزمینه قرار داشت. این بدان معنا بود که اگر تصویر بیتمپ واقعی برای پسزمینه نداشتید، آن پیام هرگز ظاهر نمیشد. و یک رنگ واحد چنین بیتمپی نیست.
نتیجه: سیستم ورود به سیستم بیهوده منتظر پیامی ماند که نشان دهد بارگیری پسزمینه به پایان رسیده است، بنابراین ویندوز ۷ هرگز شروع به کار نکرد تا اینکه قابلیت بازگشت به حالت قبل پس از ۳۰ ثانیه فعال شد و کاربران را به دسکتاپ هدایت کرد.
این مشکل همچنین میتواند در صورتی رخ دهد که کاربران سیاست گروهی «مخفی کردن آیکونهای دسکتاپ» را فعال کرده باشند. دلیل این امر آن بود که چنین سیاستهایی تنها پس از آنکه کد اصلی نوشته و توسط یک دستور If فراخوانی شده بود، اضافه شدند. با این حال، ویندوز ۷ نیز در ابتدا قادر به تشخیص این موضوع نبود و بنابراین زمان بیشتری برای بارگذاری صرف میکرد.
چن قطعه کد زیر را به عنوان مثال برای روشن ساختن این مشکل نشان میدهد:
// Original code
InitialiseDesktopIcons()
{
bind to the desktop folder
enumerate the icons
add them to the screen
Report(DesktopIconsReady);
}
// Updated with group policy support
InitialiseDesktopIcons()
{
if (desktop icons allowed by policy)
{
bind to the desktop folder
enumerate the icons
add them to the screen
Report(DesktopIconsReady);
}
}
ماهها بدون حل
به گفته چن، چند ماه طول کشید تا مایکروسافت این مشکل را تشخیص دهد. در نوامبر ۲۰۰۹، این مشکل با یک بهروزرسانی برطرف شد و از آن زمان تاکنون مشکلی وجود نداشته است، اما این یک داستان جالب برای اشتباهات مختلفی است که ممکن است در طول برنامهنویسی رخ دهد.