ورود

نسخه کامل مشاهده نسخه کامل : دوتا سوال از C#.Net



saeed_136915
07-11-2012, 10:43
سلام دوستان. من دوتا سوال داشتم از سی شارپ :

1- چجوری میشه یه Scheduled Task (نمیدونم توی سی شارپ هم این اصطلاح به کار میره یا نه) ایجاد کرد؟ منظورم تایمر نیست، منظورم اینه که یه کاری رو توی یه ساعت مشخص انجام بده.
2- برنامه هایی که من مینویسم در اجرای طولانی مدت حافظه ی مصرفیشون به تدریج بیشتر و بیشتر میشه به همین خاطر من تو آخر کدهایی که زیاد اجرا میشن ()GC.Collect مینویسم. این کد مشکلی ایجاد میکنه واسه برنامه ؟ اصلا تاثیری داره توی کم کردن حافظه ی مصرفی؟ چون اصولا سیستم عامل خودش باید کار جمع کردن گاربیج رو انجام بده.


خیلی ممنون [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

szh_1367
07-11-2012, 14:33
سلام دوستان. من دوتا سوال داشتم از سی شارپ :

1- چجوری میشه یه Scheduled Task (نمیدونم توی سی شارپ هم این اصطلاح به کار میره یا نه) ایجاد کرد؟ منظورم تایمر نیست، منظورم اینه که یه کاری رو توی یه ساعت مشخص انجام بده.
2- برنامه هایی که من مینویسم در اجرای طولانی مدت حافظه ی مصرفیشون به تدریج بیشتر و بیشتر میشه به همین خاطر من تو آخر کدهایی که زیاد اجرا میشن ()GC.Collect مینویسم. این کد مشکلی ایجاد میکنه واسه برنامه ؟ اصلا تاثیری داره توی کم کردن حافظه ی مصرفی؟ چون اصولا سیستم عامل خودش باید کار جمع کردن گاربیج رو انجام بده.


خیلی ممنون [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

سلام

سوال اول

برای استفاده یا باید از Scheduled Task خود ویندوز استفاده کنید که میتوانید از این لینک ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) اطلاعاتی در مورد اون بدست بیاورید یا باید از Timer استفاده کنید به جز این دو حالت فعلا چیزی یادم نمی اید

سوال دوم

برای این سوال باید مطالعه ای بر روی Managed Heap ( اگر بخواهم ریز تر بگویم Small Object Heap و Large Object Heap ) داشته باشید و نحوه کارکرد GC

اگر بخواهم در این مورد صحبت کنم کم کم باید سه ، چهار صفحه ای در مورد اون بنویسم که در حال حاضر این امکان وجود نداره

فقط به این اکتفا می کنم که GC در چند حالت فعال خواهد شد

زمانی که شما به صورت مستقیم GC رو فراخوانی کنید مثلا وسط کدهای برنامه عشقت کشیده GC رو فراخونی کنی

زمانی که حافظه در حال پر شدن است مثلا شما یک برنامه اجرا میکنی که خوراکش گرفتن حافظه هست وقتی حافظه داره پر میشه GC وارد عمل میشه

زمانی که استفاده از حافظه زیاد باشه مثلا بخواهی پردازش ها و محاسبات سطح بالا انجام دهید

فعلا این سه مورد رو به یاد داشتم

اگر لینک خوبی گیرم اومد حتما اینجا قرار میدهم

Payman_62
08-11-2012, 02:57
سلام.
C# زبانی هست که اولویت رو به سرعت اجرای برنامه اختصاص میده. اینه که خالی کردن حافظه هنگامی که پردازش برنامه کمتر بشه و فرصت مناسب باشه انجام میشه یا همون طور که دوستمون اشاره کردن هنگام پر شدن حافظه که دیگه در اون زمان اولویت تخلیه حافظه هست این اتفاق میفته.

اما شما میتونی هر زمانی که خواستی با دستور ()GC.Collect حافظه رو خالی کنی. با این کار شما اولویت رو میدی به مدیریت و تخلیه حافظه.
این دستور مشکلی ایجاد نمیکنه و فقط متغیرها و کلاس ها و در کل آبجکت هایی که scope مصرفشون پایان یافته رو از حافظه خارج میکنه.
بله در کاهش حافظه مصرفی هم تاثیر داره ولی هر وقت احساس کردی ممکنه با کمبود حافظه مواجه شی دستور رو صدا بزن. چون خود سیستم عامل سر فرصت مدیریت حافظه رو انجام میده.

shotok
08-11-2012, 10:29
بسم الله الرحمن الرحيم
با سلام
قبلا چند جا خونده بودم که گفته شده بود که از دستور GC.Collect استفاده نکنیم؛
چراکه در برخي موارد احتمال داره برخی از رفرنسها رو از دست بديم.
ولي جالب اينجاست که خود msdn در مثالهايي که براي اين متد آورده بود هيچ هشداري نداده بود.
موفق باشيد.

szh_1367
08-11-2012, 13:15
اگر بخواهیم حافظه رو مدیریت کنیم باید تعریف متغییر ها ، thread ها ، فراخوانی win32 ، استفاده از static ها و . . . رو به خوبی بلد باشیم وگرنه هرچقدر هم که شما از GC استفاده کنید تاثیری بر رو حافظه نخواهد داشت و حتی نتیجه عکس خواهد داد

و نکته مهمتر اینکه سیستم عامل میتواند تاثیر بسیار بسیار زیادی در مدیریت حافظه داشته باشد


بسم الله الرحمن الرحيم
با سلام
قبلا چند جا خونده بودم که گفته شده بود که از دستور GC.Collect استفاده نکنیم؛
چراکه در برخي موارد احتمال داره برخی از رفرنسها رو از دست بديم.
ولي جالب اينجاست که خود msdn در مثالهايي که براي اين متد آورده بود هيچ هشداري نداده بود.
موفق باشيد.
مثلا چه رفرنس هایی ؟

اگر ادرس جایی که مطلب رو خوندید دارید قرار دهید تا بنده و دوستان استفاده کنند

saeed_136915
08-11-2012, 14:49
خیلی ممنون از جواب دوستان. من جواب سوال دومم رو گرفتم ولی سوال اولم تقریبا حل نشده. توی اون لینکی که جناب szh_1367 ([ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]) گذاشتن باید یه فایل دیگه دانلود بشه واسه اجرا ولی من میخوام روی چند تا سیستم مختلف اجرا بشه. حالا به فرض من اون فایل رو گرفتم واسه شناسوندن به سیستم باید چیکار کنم؟؟ من فایل هاش رو توی system32 و syswow64 کپی کردم ولی ویژوال استادیو نشناخت اون هارو. چیکار باید بکنم؟

shotok
08-11-2012, 15:00
بسم الله الرحمن الرحيم
با سلام
خدا رو شکر که جواب سوالتون رو گرفتيد؛ لطفا ماحصلش رو براي ما هم بفرمائيد تا استفاده کنيم.
موفق باشيد.