PDA

View Full Version : آموزش: Lazy Initialization



tooraj_azizi_1035
شنبه 31 اردیبهشت 1390, 10:12 صبح
منبع: http://msdn.microsoft.com/en-us/library/dd997286.aspx

سلام؛ دوستان صاحبنظر در تکمیل این تاپیک یاری کنند تا همه استفاده کنیم.

Lazy initialization ("مقداردهی اولیه کند" یا "با تنبلی" یا "تاخیری" یا هر اصطلاح مناسب تری که اساتید لغت شناس پیشنهاد دهند) به معنای آن است که مقداردهی اولیه اعضای یک شیء تا فرارسیدن اولین مرتبه استفاده از شیء به تاخیر می افتد. Lazy initialization در اصل برای بهبود کارائی، اجتناب از محاسبات هدر دهنده زمان، و کاهش مقدار حافظه مود نیاز یک Application استفاده می شود.




این موارد رایج ترین سناریو های به کارگیری Lazy initialization هستند:

وقتی که شما شیئی دارید که ایجاد آن هزینه بر است و برنامه ممکن است از آن استفاده نکند. مثلاً فرض کنید شیئی به نام Customer داریم که دارای یک Property به نام Orders هست . Orders حاوی یک آرایه بزرگ از Order هاست که باید مقداردهی اولیه شوند و نیاز به ایجاد ارتباط با پایگاه داده ها دارد. در صورتی که کابر هرگز نیاز به دیدن داده ها نداشته باشد و یا اینکه نخواهد داده ها را درگیر محاسبات زمان بر بکند دیگر نیازی به اشغال فضای حافظه و یا سیکل های محاسباتی برای ایجاد آن نیست.با استفاده از Lazy<Orders> جهت اعلان شیء Orders برای آماده سازی اولیه تاخیری، می توانید از هدر رفت منابع سیستم هنگامی که نیازی به این کار نیست جلوگیری کنید.
وقتی مجبور هستید که شیئی را ایجاد کنید که هزینه ایجاد آن گران است، و شما میخواهید ایجاد آن را تا انجام شدن سایر عملیات پر هزینه به تاخیر بیندازید. مثلاً فرض کنید برنامه شما چندین نمونه از اشیاء را در حافظه بارگذاری می کند اما فقط بعضی از آن ها در همان ابتدای کار نیاز دارد. شما میتوانید کارایی زمان شروع برنامه را با به تاخیر انداختن زمان مقداردهی اولیه اشیائی که پس از ایجاد اشیائی دیگر به آنها نیاز پیدا می کنید، تسریع ببخشید.
گرچه شما میتوانید خودتان کدی بنویسید که مانند Lazy initialization عمل کند اما توصیه می شود که به جای این کار از Lazy<T> استفاده شود.برای تعریف یک نوع داده ای Lazy Initilized مثل MyType، از فرم Lazy<MyType> همانطوری که در مثال زیر نمایش داده شده است استفاده کنید.
در صورتی که یک delegate به سازنده Lazy<T> (http://msdn.microsoft.com/en-us/library/dd642331.aspx) ارسال نشود، زمانی که شیء برای اولین بار مورد دستیابی قرار می گیرد نوع داده ای مشخص شده توسط Tتوسط Activator.CreateInstance (http://msdn.microsoft.com/en-us/library/system.activator.createinstance.aspx) ایجاد می شود. در صورتی که نوع داده ای دارای یک سازنده پیش فرض نباشد یک Exception زمان اجرا رخ می دهد.


در اولین فرصت تکمیل می کنم...