PDA

View Full Version : معادل ()Dispose تو WPF ؟



mehdibahadori
شنبه 03 مرداد 1388, 08:06 صبح
تو WPF چطور میتونم یک شی رو نابود کنم ؟(مثل متد Dispose تو c#):متفکر:

رضا عربلو
شنبه 03 مرداد 1388, 09:47 صبح
کنترل های wpf اینترفیس IDispoable را پیاده سازی نمی کنند زیرا هیچ unmanaged resourceی را استفاده نمی کنند. GAC بطور اتوماتیک این کار را انجام میدهد.

mehdibahadori
شنبه 03 مرداد 1388, 09:50 صبح
چطور میتونم یک شی رو نابود کنم به طوری که تابه مخرب اون فراخانی بشه ؟
منظور از GAC چیه؟ میشه یه کم دیگه توضیح بدید (اگه میشه مثال بزنید)
تشکر

رضا عربلو
یک شنبه 04 مرداد 1388, 16:33 عصر
GC یا همان Garbage Collector صجیج می باشد:

با حفظ کپی رایت :
C# 2008 Garbage Collector http://wrox.ir/images/M_images/printButton.png (http://wrox.ir/index.php?view=article&catid=40%3Aprogramming&id=69%3Ac2008garbage&tmpl=component&print=1&page=&option=com_content&Itemid=69#) در يك تعريف كلي مي توان گفت كه Garbage Collector كار مديريت حافظه (تخصيص حافظه ، واكشي حافظه و آزاد سازي حافظه ) را انجام مي دهد . مديريت طول عمر اشيا در .NET و چگونگي آزاد شدن حافظه هاي گرفته شده بوسيله اشياء و مولفه هاي برنامه سازي ، توسط Garbage Collector انجام مي شود .
هر برنامه به نحوي از منابع مشخصي استفاده ميکند. اين منابع ميتوانند فايلها، بافرهاي حافظه، فضاهاي صفحه نمايش، ارتباطات شبکه اي، منابع بانک اطلاعاتي و ... باشند. براي استفاده از هر نوع از اين داده ها لازم است که براي ارايه آن نوع ، حافظه تخصيص داده شود.

انجام عمليات تخصيص حافظه ، يکي از ريشه هاي اصلي خطاهاي ايجاد شده در برنامه نويسي به شمار مي رود. مواقع زيادي پيش مي آيد که برنامه نويس آزادسازي يک حافظه را وقتي ديگر مورد نياز نيست فراموش مي کند. مواقع زيادي پيش مي آيدکه برنامه نويس از يک حافظه که قبلا آزاد شده استفاده کند.اين نوع خطاها باعث هدر دادن حافظه و از بين رفتن پايداري اشيا ميشوند که کارايي برنامه را در زمانهاي مختلف به سمت منفي تغيير مي دهد. براي کمک به يک برنامه نويس براي تشخيص اين نوع خطاها ابزارهاي ويژه اي مانند Windows Task Manager و System Monitor ActiveX Control و ... طراحي شده اند.
در پلتفرم .NET اين امر توسط Garbage Collector انجام ميشود.
کاملا برنامه نويس را از کنترل استفاده از حافظه و بررسي زمان آزادسازي آن راحت ميکند. Garbage Collection

نحوه كار Garbage Collector
Garbage Collectorبررسي مي کند که آيا در heap شيي وجود دارد که ديگر توسط برنامه استفاده نشود. اگر چنين اشياي در برنامه موجود باشند حافظه گرفته شده توسط اين اشيا آزاد ميشود (اگر هيچ حافظه اي براي اشياي جديد در heap موجود نباشد خطاي OutOfMemoryException توسط عملگر new رخ ميدهد). اما چگونه Garbage Collector تشخيص ميدهد که آيا برنامه يک متغير را نياز دارد يا خير؟ همانطور که ممکن است تصور کنيد اين سوال پاسخ ساده اي ندارد.
هر برنامه داراي يک مجموعه از rootها است. يک root اشاره گري است به يک نوع داده ارجاعي. اين اشاره گر يا به يک نوع داده ارجاعي در managed heap اشاره ميکند يا با مقدار null مقدار دهي شده است.براي مثال تمام متغييرهاي استاتيک و يا عمومي(Global Variables) يک root به شمار مي روند . به علاوه هر متغير محلي که از نوع ارجاع باشد و يا پارامترهاي توابع در stack نيز يک root به شمار ميروند. در نهايت، درون يک تابع، يک ثبات CPU که به يک شيي از نوع ارجاع اشاره کند نيز يک root به شمار مي رود.زماني که کامپايلر JIT يک کد IL را کامپايل ميکند علاوه بر توليد کدهاي Native يک جدول داخلي نيز تشکيل ميدهد. منطقا هر رديف از اين جدول يک محدوده از بايتهاي آفست را در دستورات محلي CPU براي تابع نشان ميدهند و براي هر کدام از اين محدوده ها يک مجموعه از آدرسهاي حافظه يا ثباتهاي CPU را که محتوي rootها هستند مشخص ميکند.
نویسنده : حسین جلیلیان


http://www.barnamenevis.org/forum/showthread.php?t=4613 را نیز مطالعه کنید.