تبلیغات :
ماهان سرور
آکوستیک ، فوم شانه تخم مرغی ، پنل صداگیر ، یونولیت
دستگاه جوجه کشی حرفه ای
فروش آنلاین لباس کودک
خرید فالوور ایرانی
خرید فالوور اینستاگرام
خرید ممبر تلگرام

[ + افزودن آگهی متنی جدید ]




نمايش نتايج 1 به 5 از 5

نام تاپيک: dispose In dataTable

  1. #1
    پروفشنال
    تاريخ عضويت
    Nov 2007
    پست ها
    546

    14 dispose In dataTable

    بسم الله الرحمن الرحیم

    با سلام

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


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

    با تشکر

  2. #2
    کـاربـر بـاسـابـقـه szh_1367's Avatar
    تاريخ عضويت
    Apr 2007
    پست ها
    1,007

    پيش فرض

    درود

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

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

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

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

  3. #3
    پروفشنال
    تاريخ عضويت
    Nov 2007
    پست ها
    546

    پيش فرض

    درود

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

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

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

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

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

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

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

    با سپاس

  4. #4
    کـاربـر بـاسـابـقـه szh_1367's Avatar
    تاريخ عضويت
    Apr 2007
    پست ها
    1,007

    پيش فرض

    با سلام

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

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

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

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

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

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

  5. #5
    ناظر انجمن .NET Framework _H2_'s Avatar
    تاريخ عضويت
    Feb 2007
    محل سكونت
    یک جایی بین Framework و نارمک!
    پست ها
    4,746

    پيش فرض

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

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

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

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

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

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

    =====

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

    موفق باشید.
    Last edited by _H2_; 23-07-2012 at 22:49.

  6. 2 کاربر از _H2_ بخاطر این مطلب مفید تشکر کرده اند


Thread Information

Users Browsing this Thread

هم اکنون 1 کاربر در حال مشاهده این تاپیک میباشد. (0 کاربر عضو شده و 1 مهمان)

User Tag List

برچسب های این موضوع

قوانين ايجاد تاپيک در انجمن

  • شما نمی توانید تاپیک ایحاد کنید
  • شما نمی توانید پاسخی ارسال کنید
  • شما نمی توانید فایل پیوست کنید
  • شما نمی توانید پاسخ خود را ویرایش کنید
  •