PDA

View Full Version : سوال: آزاد سازی منابع در کلکسیون ها



m2_farzan
شنبه 02 مهر 1390, 06:29 صبح
سلام.
یه سوال دیگه هم داشتم که اگه جواب بدید واقعا لطف می کنید.

آیا در انواع Collection با دستور Remove منابع اشغال شده آزاد می شوند؟
فرض می گیریم که اشیا به جای دیگری وصل نیستند.

مثلا در این کد منابع آزاد میشوند؟
System.Collections.ArrayList myTimers = new System.Collections.ArrayList();
myTimers.Add(new Timer());
myTimers.RemoveAt(0);

mehdi.mousavi
دوشنبه 04 مهر 1390, 11:54 صبح
سلام.


از ArrayList استفاده نکنید، بدلیل انجام عمل Boxing/Unboxing هنگام دسترسی به Element های لیست! (استفاده از Generic List ها ارجحیت داره).
اگر منظورتون از آزاد سازی منابع، فراخوانی Dispose روی Element های موجود در ArrayList هنگام Call شدن متود RemoveAt هستش، خیر، Dispose بطور خودکار روی Element ها Call نخواهد شد.
اگر شما نیاز دارید تا Element ها هنگام حذف شدن از لیست، Dispose نیز بشن، باید Extension Method ای بنویسید و این کار رو خودتون در اون متود انجام بدید. روش انجام اینکارو میتونید اینجا مشاهده کنید (http://stackoverflow.com/questions/1969705/clear-controls-does-not-dispose-them-what-is-the-risk).
برای آشنایی با چگونگی آزادسازی Resource ها در .NET توسط Garbage Collector، لطفا به این مقاله (http://msdn.microsoft.com/en-us/magazine/bb985010.aspx) رجوع کنید.

موفق باشید.