کابوس استثناء out of memory
استثناء out of memory یکی از خطاهای دلهرهآوری است که میتواند یک کابوس شبانه به دنبال داشته باشد. این استثناء میتواند کنترل جریان برنامه شما را متوقف کند، حتی زمانیکه به لحاظ فیزیکی حافظه کافی روی سیستم نصب شده باشد. شوخی میکنید؟ بههیچ وجه! اجازه دهید توضیح دهیم چرا این خطا بهطور مکرر بروز میکند و چگونه داتنت 4.5 این مشکل را برطرف کرده است.
اشیایی که در محیط مدیریت شده (managed) ساخته میشوند، درون حافظه heap ذخیره میشوند. در یک دوره زمانی طولانی، heap به دلیل ساخت و حذف اشیاء ممکن است دچار از همگسیختگی شود. این از همگسیختگی اشاره به حفرههایی در حافظه دارد (حافظه آزاد) که به صورت پراکنده هستند. در این حالت، اگر برنامه شما از مقدار زیادی حافظه استفاده کند، حتی اگر فضای موردنیاز در دسترس باشد زماناجرا (runtime) توانایی بهرهبرداری از این حفرههای پراکنده در حافظه را ندارد. در نتیجه استثناء Out of memory را مشاهده خواهید کرد.
فشردهسازی اشیای بزرگ روی heap
حافظه در برنامههای مدیریت شده به دو بخش Small Object Heap و Large Object Heap تقسیم میشود. زمانیکه یک شی اندازهای بزرگتر از 85 کیلوبایت داشته باشد، به عنوان یک شی بزرگ Large Object شناخته شده و روی LOH قرار میگیرد و اشیایی که اندازه کمتر از 85 کیلوبایت دارند روی SOH قرار میگیرند. فشردهسازی LOH بهتازگی معرفی شده و برای فشردهکردن و حذف ازهم گسیختگی heap مورد استفاده قرار میگیرد. این قابلیت اکنون در داتنت 4.5.1 برای حل مشکل استثناء Out of memory مورد استفاده قرار میگیرد. برای فعالسازی این قابلیت نیازمند تنظیم خاصیت LargeObjectHeapCompactionMode هستید. این خاصیت میتواند به یکی از دو مقدار Default و CompactOne تنظیم شود. اگر حالت اول انتخاب شود، از فشردهسازی اشیاء روی heap در مدت زمان GC صرفنظر میشود. اگر دومی انتخاب شود، اشیای بزرگ روی Heap در مدت زمان چرخه بعدی فشرده میشوند. ترکیب نحوی بهکارگیری این خاصیت به شرح زیر است.
GCSettings.LargeObjectHeapCompactionMode = GCLargeObjectHeapCompactionMode.CompactOnce;
GC.Collect();
پشتیبانی از حالت ارتجاعی ارتباط در ADO.Net
Connection Resiliency در قالب یک API جدید وجود ندارد و در پسزمینه ADO.Net مورد استفاده قرار میگیرد. اما قبل از توضیح Idle Connection Resiliency بهتر است با مفهوم Idle آشنا شویم. یک Idle Connection یک ارتباط فعال است اما یک فرمان را اجرا نکرده یا در انتظار دادهها است. از این پس دیگر نیازی به نوشتن کدی برای پیادهسازی یک اتصال در حالت ارجاعی که بیاستفاده یا شکسته ساخته میشود، نخواهید داشت. داتنت 4.5.1 با این قابلیت از پیشساخته برای ساخت مجدد ارتباطات قطع شده به بانکاطلاعاتی در اختیار طراحان قرار دارد. قابلیت "ADO.NET Idle Connection Resiliency" توسط Azure SQL Database و SQL Server 2014 پشتیبانی میشود.
بهبود زمان شروع: بهینهسازی پروفایل
بهینهسازی پروفایل قابلیتی است که در داتنت 4.5 معرفی شد. این قابلیت زمان راهاندازی برنامهها را به حداقل میرساند. اما این تکنیک چگونه کار میکند؟ یک پروفایل، فایلی است که متدهایی که یک برنامه در زمان اجرا به آنها نیاز دارد را در خود جای میدهد. زمانیکه برنامه اجرا میشود, کامپایلر Just In Time در یک ریسمان پسزمینه روی پردازشگرهای مختلف اجرا میشود و کدهای محلی را با استفاده از کدهای IL تولید میکند.
بهبود Garbage Collection: Server GC معرفی شد
محیط مدیریتشده داتنت از garbage collection برای پاکسازی اشیایی که مورد استفاده قرار نگرفته یا ارجاعی به آنها وجود ندارد، استفاده میکند. اشیایی که به وجود آنها نیازی نیست. در نسخههای قبلی داتنت ریسمانهای برنامه تا زمانیکه فرآیند پاکسازی حافظه توسط GC در جریان بود به حالت تعلیق در میآمدند. این موضوع به عنوان یک عامل اصلی در کاهش کارایی یک برنامه به شمار میرفت، بهدلیل اینکه برنامه باید تا پایان یافتن کار GC در انتظار میماند. با ورود داتنت 4.5 این مسئله دیگر یک معضل نیست. این قابلیت که بهتازگی برای تسهیل آزادسازی نسل دوم اشیاء معرفی شده از یک ریسمان پسزمینه استفاده میکند، در نتیجه فشاری که روی ریسمان اصلی GC وجود دارد به حداقل رسیده و در نتیحه ریسمانهای برنامه دوره تناوب کمتری از حالت تعلیق را تجربه میکنند. به عبارت سادهتر server GC یک Heap مدیریت شده جداگانه برای هر پردازشگر ایجاد کرده و برای هر heap یک ریسمان GC اختصاص میدهد. چارچوب داتنت 4.5 در پسزمینه garbage collection از هر دو شکل سرور و ایستگاه کاری پشتیبانی میکند. حالت ایستگاه کاری بهعنوان حالت پیشفرض قرار دارد. در داتنت 4.5 از فرآیند garbage collection همزمان نیز پشتیبانی میشود. برای این منظور یک ریسمان زمانیکه garbage collection لازم است، تخصیص داده میشود.
بهبود قابلیتهای برجسته در داتنت 4.5.2
نسخه 4.5.2 بهتازگی توسط مایکروسافت منتشر شده است.. قابلیتهای جدید در وبلاگ داتنت قرار دارد. در کنار قابلیتهایی همچون خطایابی و پروفایل که بهبود یافتهاند، ASP.Net نیز بهینهسازی شده است. اکنون میتوانید از متدهای HostingEnvironment.QueueBackgroundWorkItem برای زمانبندی وظایف جزئی که بهصورت همزمان در پسزمینه قرار میگیرند، استفاده کنید. برای بازرسی و ویرایش سرآیندهای واکنشی و کدهای آنها از متدهای HttpResponse.AddOnSendingHeaders و HttpResponseBase.AddOnSendingHeaders استفاده کنید. برای اطلاعات بیشتر در این مورد به اینجا مراجعه کنید.
چه چیزی در آینده خواهد آمد؟
پیشنمایش داتنت نسخه 4.6 در نوامبر توسط مایکروسافت منتشر شد. یک کپی از این پیشنمایش در این آدرس قرار دارد.غول نرمافزاری اعلام کرده است پشتیبانی از NET 4 ، .NET 4.5 ، .NET 4.5.1. و NET 4.5.2 فقط تا 12 ژانویه 2016 انجام میشود. این پشتیبانی شامل بهروزسانیهای امنیتی و غیرامنیتی و پشتیبانی فنی و وصلهها نیز میشود. از 12 ژانویه 2016 بهبعد پشتیبانی فقط از نسخه 4.5.2 انجام میشود. اطلاعات بیشتر در این آدرس قرار دارد.
ماهنامه شبکه را از کجا تهیه کنیم؟
ماهنامه شبکه را میتوانید از کتابخانههای عمومی سراسر کشور و نیز از دکههای روزنامهفروشی تهیه نمائید.
ثبت اشتراک نسخه کاغذی ماهنامه شبکه
ثبت اشتراک نسخه آنلاین
کتاب الکترونیک +Network راهنمای شبکهها
- برای دانلود تنها کتاب کامل ترجمه فارسی +Network اینجا کلیک کنید.
کتاب الکترونیک دوره مقدماتی آموزش پایتون
- اگر قصد یادگیری برنامهنویسی را دارید ولی هیچ پیشزمینهای ندارید اینجا کلیک کنید.
نظر شما چیست؟