PDA

View Full Version : آیا dataset باید پاک شود ؟



Modifier
جمعه 14 تیر 1387, 19:15 عصر
سلام علیکم

آیا پس از اتمام کار با دیتاست باید اون رو پاک کرد ؟اگه نشه چی مشه ؟

با clear یا dispose ؟

ممنون

یا علی

merlin_vista
جمعه 14 تیر 1387, 19:39 عصر
خود C# به صورت اتوماتيك بعد از تمام شدن كارش با متغير ها و شي ها آنها را از بين ميبره .

Behrouz_Rad
جمعه 14 تیر 1387, 20:13 عصر
به عنوان یک قانون کلی، اگر شی ای متدی (همانند Dispose) رو برای تخریب خودش به همراه داشت حتما پس از پایان کار با اون شی، اون متد رو فراخوانی کنید.

موفق باشید.

m.hamidreza
جمعه 14 تیر 1387, 20:35 عصر
مهندس بهروز با این حساب Garbage Collection که اینقدم NET. بهش مینازه نقشش تو Dispose کردن Object ها چیه ؟
یه چیز دیگه اینکه فرق Finalize با Dispose چیه؟

ممنون.

Behrouz_Rad
جمعه 14 تیر 1387, 23:22 عصر
با این حساب Garbage Collection که اینقدم NET. بهش مینازه نقشش تو Dispose کردن Object ها چیه ؟

GC در فواصل زمانی مشخص وارد عمل میشه. این فواصل زمانی، مشخص نیستن. وقتی شما شی ای رو Dispose می کنید، اون شی برای حذف شدن از حافظه علامت می خوره و بلافاصله حذف میشه اما اگر اون رو به حال خودش رها کنید، مدتی طول میکشه تا GC اون رو شناسایی کنه مگر اینکه شما به طور صریح متد Collect کلاس GC رو فراخوانی کنید.


یه چیز دیگه اینکه فرق Finalize با Dispose چیه؟

کلاس هایی که نیاز به آزاد شدن حافظه ازشون هست، اینترفیس IDisposable رو پیاده سازی می کنند. GC متد Finalize اونها رو فراخوانی می کنه تا اونها را Dispose کنه.

یک نکته هم بگم که احتمالا واستون جالب هست...
برخی کلاس ها، اینترفیس IDisposable رو پیاده سازی نمی کنند. برای این کلاس ها باید با توجه به امکاناتی که فراهم می کنند، محتویات اونها رو null کنید.
مثلا کلاس String یک کلاس By Ref هست که متد Dispose ای نداره! بنابراین به عنوان یک ترفند، می تونیم محتویات متغیر رشته ای رو برابر با String.Empty قرار بدیم تا به نوعی باز پس گیری حافظه رو شبیه سازی کرده باشیم.
و یا کلاس StringBuilder نیز چون By Ref هست، مقدار خصوصیت Length اون رو برابر با صفر قرار بدیم و ...

موفق باشید.

Modifier
شنبه 15 تیر 1387, 00:15 صبح
سلام علیکم

gabrage collector به جای مخرب در managed code ها بکار میره. یعنی به خاطر اینکه مخرب
بصورت اتوماتیک صدا زده بشه بجاش gabrage collector کار میکنه.
gabrage collector برای انجام پاک سازی از متد finalize استفاده میکند.

بجای مخرب dispose رو قرار دادند، که البته باید بصورت دستی صدا زده بشه.
استفاده از gabrage collector برای پاک کردن تعداد زیاد حافظه سریعتر است.

اینا توضیح کلی بود .

نکته مهم اینه که تا وقتی که برنامه در حال اجرا است حافظه پاک شده آزاد نمیشود ، وقتی
gabrage collector آماده اجرا میشود که برنامه را خاتمه دهیم ، آن موقع حافظه ها رو پاک و
آزاد میکند. و تا وقتی برنامه در حال اجرا است فقط حافظه پاک میشود.

احتمالا با استفاده از dispose میتوانیم حافظه رو در هنگام اجرا پاک و آزاد کنیم.

موفق باشید.

MehranZand
شنبه 15 تیر 1387, 00:34 صبح
با این حساب Garbage Collection که اینقدم NET. بهش مینازه
Java به این امر بیشتر پرداخته، حتی تیم توسعه دهنده جاوا ادعا کرده که هیچگاه نیاز به فراخوانی ()gc نیست.

m.hamidreza
شنبه 15 تیر 1387, 01:01 صبح
Java به این امر بیشتر پرداخته، حتی تیم توسعه دهنده جاوا ادعا کرده که هیچگاه نیاز به فراخوانی ()gc نیست.

:چشمک:


اینا توضیح کلی بود .

نکته مهم اینه که .....

اینایی که شما گفتی ترجمه کتابی چیزی بوده ؟ شکل ترجمه های جعفرنژاد قمی بود! :بامزه:
قسمت دومش کمی تا قسمتی عجیب بود!

Modifier
شنبه 15 تیر 1387, 01:18 صبح
اینایی که شما گفتی ترجمه کتابی چیزی بوده ؟ شکل ترجمه های جعفرنژاد قمی بود! :بامزه:
قسمت دومش کمی تا قسمتی عجیب بود!

اینا دقیقا ترجمه و نکته برداری خودم بوده.:بامزه:

قسمت اول تقریبا ترجمه / قسمت دوم برداشت خودم.

از یه کتاب در مورد C++.net. اتشارات sams.

شما هم بهتره از سر چشمه آب بنوشی. :-)