PDA

نسخه کامل مشاهده نسخه کامل : dispose In dataTable



shotok
20-07-2012, 10:55
بسم الله الرحمن الرحیم

با سلام

1) بعد از استفاده از دیتا تیبل لازم است که آنرا Dispose کنیم؟



برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید
2)کد بالا درست اجرا میشه. و سوال من اینکه اگه واقعا Dispose عمل میکنه چطور در خط بعد میتونه اون رو برگردونه؟

با تشکر:11:

szh_1367
21-07-2012, 09:29
درود

کدت یه جورایی مشکل داره یعنی چرا باید بعد از اینکه DS رو dispose میکنه اون رو برگردونه !!!

خیر نیازی نیست بعد از استفاده از Data table اون رو dispose کنید وقتی که یک بلاک تمام میشود خود VS منابع بلا استفاده رو ازاد خواهد کرد

یعنی چی کد درست کار میکنه ؟ یعنی مقدار DS رو درست برمیگرداند ؟ !!!

اگر کدت رو کامل قرار بدی راحت تر میشه راهنمائی کرد

shotok
21-07-2012, 11:44
درود

کدت یه جورایی مشکل داره یعنی چرا باید بعد از اینکه DS رو dispose میکنه اون رو برگردونه !!!

خیر نیازی نیست بعد از استفاده از Data table اون رو dispose کنید وقتی که یک بلاک تمام میشود خود VS منابع بلا استفاده رو ازاد خواهد کرد

یعنی چی کد درست کار میکنه ؟ یعنی مقدار DS رو درست برمیگرداند ؟ !!!

اگر کدت رو کامل قرار بدی راحت تر میشه راهنمائی کرد

با سلام

ممنون از پاسختون

واقعیتش اینه که من نمی دونم کدوم منابع توسط خود GC مدیریت میشن و کدومش مدیریت نمیشه.

قسمت قبلی کد چیز خاصی نیست؛ تنها DS رو پر میکنه. بله درست برمی گردونه!

با سپاس

szh_1367
23-07-2012, 10:18
با سلام

ممنون از پاسختون

واقعیتش اینه که من نمی دونم کدوم منابع توسط خود GC مدیریت میشن و کدومش مدیریت نمیشه.

قسمت قبلی کد چیز خاصی نیست؛ تنها DS رو پر میکنه. بله درست برمی گردونه!

با سپاس
وقتی شما dispose میکنید منابعی که شما در اختیار گرفته اید ازاد خواهند شد و متغییرها مقادیر پیش فرض خود را خواهند گرفت اما متوجه نمیشوم که چطور مقادیر درستی برگردانده میشوند

در مورد مدیریت حافظه در کتاب اقای هاشمیان (اگر درست یادم باشه) مواردی توضیح داده شده بود به انجا مراجعه کنید

برای بدست اوردن اطلاعات بیشتر میتوانید garbage collector رو سرچ کنید

_H2_
23-07-2012, 22:44
سلام

بعد از استفاده از دیتا تیبل لازم است که آنرا Dispose کنیم؟
هر شی ای که Dispose دارد را بهتر است بعد از نیاز و مصرف Dispose کنید.


واقعا Dispose عمل میکنه چطور در خط بعد میتونه اون رو برگردونه؟
از نظر شی گرایی شما یک شی جدبد ساخته اید و اشاره گر ان را دارید، پس میتوانید ان را منتقل کنید، ید و برگردانید و... و...
ولی اگر Dispose شده باشد، گرچه یک شی مجاز از دید شی گرایی دارید ولی ان شی تهی و لاشه ای مرده بیشتر نخواهد بود و هیچ چیز را نمیتوانید از داخل ان استخراج کنید.
(مثلاً دیتاست شما دیگر حاوی جداول و ستون ها و سطرها و... نخواهد بود)


کدوم منابع توسط خود GC مدیریت میشن و کدومش مدیریت نمیشه
همه منابع (بجز یک مورد خاص که اینجا جای طرح و بحث ندارد) توسط جمع آوری کننده حافظه هرز متاثر میشوند و در کنترل آن خواهند بود.
مکانیزم و منطق اصلی جمع آوری کننده بر مبنای شمارش تعداد ارجاع به یک شی است.
بر اساس همین مکانیزم شما نیازی به null کردن متغییرهای محلی درون یک تابع یا متغییرهای داخل یک شی در زمان terminate آن ندارید (برخلاف محیط مدیریت نشده ای مثل ++C)
مگر آنکه مثلاً کاری طولانی داشته باشید و بخواهید قبل از اتمام حلقه ها و.... و به پایان رسیدن تابع با null کردن متغییری به نابود سریعتر شی ای کمک کنید.

وقتی یک شی را new میکنید، موجودیتی را در هیپ ساخته اید که اشاره گر آن بین متغییرهایتان و در ورود و خروج هایتان از/به تابع منتقل میشود. (فقط اشاره گر)
جمع آوری کننده تعداد این اشاره گرهای فعال به یک موجودیت را شناسایی و هرگاه هیچ متغییری دیگر به آن موجودیت اشاره نداشت و به نوعی آن موجودیت در هیپ گم یا رها شده بود، آن را بلااستفاده تشخیص داده و منابع آن را آزاد میکند.

پس جایگاه Dispose کجاست؟
Dispose برای اشیایی است که...
- یا منابعی خارج از محیط CLR دارند که جمع آوری کننده توان حذف ان را ندارد (مثل بازکردن فایلی در سیستم عامل، ارتباط با دیتابیس، سوکت بازشده ای در سیستم عامل، تخصیص هندلرهای مختلف ویندوز و... و...)

- یا منابعی که حافظه خیلی زیادی مصرف میکنند، و میخواهید پیش از انها همه متغییر های اشاره شده به ان null شود خیلی سریعتر محتویات ان را در فضای هیپ رها کنید تا در چنگال جمع اوری کننده منابعشان آزاد شود. (مثل Dataset)

=====

در Dispose گرچه خود شی اصلی که شما ان را میشناسید جمع اوری نمیشود (تا تمام متغیرهایش null شود) و همچنان اشاره گر مجاز غیر null دارد و قابل انتقال است ولی تمام اشیای داخلی که ان شی استفاده کرده آزاد یا در هیپ رها میشوند و از شی مورد نظر جز پوسته ای بدون مغز چیزی نمیماند!

موفق باشید.