با سلام

همانطور که می دانید ، در سی شارپ اطلاعات به دو صورت ذخیره می شوند:

  1. بصورت فیزیکی (روی هارد سرور)
  2. بصورت مجازی (روی رم سرور)

وقتی از یک کلاس instanse می سازید ، در اصل کلاس شما روی رم سرور ایجاد میشه و تمامی property ها و اطلاعاتش هم روی رم سرور ذخیره میشه ...


خوب این موضوع وقتی دارین تحت کنسول کار می کنین ، زیاد مهم نیست ؛

ولی زمانی که در ساخت یک سایت از کلاس نویسی استفاده می شود 2 تا مشکل بزرگ بوجود میاره :


  1. بعد از یه مدت رم سرور پر میشه و به اصطلاح بخش بزرگی از رم درگیر میشه ...
  2. اگر کلاس شما حاوی اطلاعات حساسی باشه ، هکز های حرفه ای به راحتی می تونن بهش دسترسی داشته باشن


در توضیح مورد دوم :
من با این مورد وقتی توجه کردم که داشتم از یک کلاس برای ایجاد تصویر امنیتی (کپچا) استفاده می کردم .... و اگر کلاس روی رم باقی می موند ، خیلی خطرناک بود .... و ممکن بود که روبات ها بتونن تصاویر رو از روی رم بخونن و .....


در کلاس نویسی شما می تونین instance ای که ساختین رو بعد از اینکه کارتون باهاش تموم شد ، از بین ببرین


این کار با Distractor انجام میشه ....

همانطور که از اسمش مشخصه ، عکس کانستراکتور است و کارش از بین بردن کلاسه ...


در سی شارپ یک کلاس با نام GC (گاربیج کالکتور) وجود داره که کارش اینه که کلاس هایی که روی رم هستند رو خودش بطور خودکار بعد از یه مدت ار زوی رم پاک می کنه (به اصطلاح Dispose می کنه)


خوب گاهی ما به یک کلاس نیاز داریم که خود به خود توسط GC از بین نره ....

آموزش از بین بردن یک کلاس (Dispose) در سی شارپ - netnic.ir
مثلا من یک کلاس دارم که قراره یک عدد 10 رقمی بسازه و توی یکی از property هاش قرار بده ....

این عدد 10 رقمی برای من خیلی مهم و حساسه و نمی خوام روی رم باقی بمونه (نمی خوام به امید GC بمونم که بعد از یه زمانی بیاد و کلاسم رو از روی رم پاک کنه)


من می خوام توی کلاس GC رو غیر فعال کنم و بعد خودم یک تابع توی کلاسم بسازم که از بیرون از کلاس بتونم خودم هر وقت دوست داشتم کلاسم رو از روی رم پاک کنم (می خوام یک تابع Dispose شخصی برای خودم داشته باشم)


در ادامه مطلب یاد میگیریم که چطور میشه این کارو انجام داد.

به کد سی شارپ زیر دقت کنین :





اول توی کلاس بعد از کانستراکتور یک دیستراکتور می سازم

حالا من 2 تا تابع ساختم که یکیش بدون ورودیه و دومی با ورودی است ....

تابع دوم اگر بهش true پاس بدم ، میاد و اون property که برای من خیلی مهمه و اطلاعات حساسم توشه رو کامل dispose می کنه تا خیالم از بابت اطلاعات داخل این property راحت بشه


تابع اول ابتدا بوسیله GC میاد و کلاس رو از روی رم بر می داره و بعد بوسیله تابع دوم میاد و property حساسم رو از روی رم بطور کامل پاک می کنه.


البته من اطلاعات دقیقی درباره GC ندارم ولی چیزی که از حرفای استاد سوری و از مطالب توی نت فهمیدم در همین حد بود ....

حالا انشالله یک آموزش کامل درباره GC قرار میدن که کامل تر و ریز تر GC رو درک کنیم....


میان بر :

دقت کنین که ~ رو که بزنین و بعد 2 بار تب رو بزنین ، خودش دیستراکتور را می سازه ....
مثل کانستراکتور که از ctor و 2 تا تب استفاده می کنین

امیدوارم که از این آموزش هم خوشتون اومده باشه

سوالاتتونو توی بخش نظرات مطرح کنین

یا حق

نوشته شده در تاریخ سه شنبه 20 فروردین 1392    | توسط: ح.م    | طبقه بندی: آموزش ASP.NET، آموزش سی شارپ،     | نظرات()