PDA

View Full Version : سوال: روش انجام پروسه ای که توضیح میدهم



morteza271
دوشنبه 22 فروردین 1390, 11:23 صبح
سلام.

من میخوام در یه پروژه بر اساس یه تاریخ و زمان از پیش تعیین شده که در دیتابیس ذخیره شده وقتی به اون زمان رسیدم یه کاری رو انجام بدم.

حالا میخوام بدونم به نظر شما این کار رو چطوری انجام بدم بهتره؟
مثلا یکی از روش هایی که به ذهن خودم رسیده اینه :
به یه تایمر یا یه Thread چک کنم اگه به اون زمان رسیده کار رو انجام بده!
ولی به نظرم این روش زیاد جالب و بهینه نیست، دوستان لطف کنند نظرشون رو بدن تا بهترین روش رو پیدا کنم.
با تشکر.منتظر نظرات راهگشای شما دوستان هستم.

نیما حتمی
دوشنبه 22 فروردین 1390, 11:30 صبح
سلام
می تونین زمان و تاریخ فعلی رو بدست بیاری بعد با اون تاریخ و زمانی که در بانک داری مقایسه کنی اگه مساوی بود اون کارو انجام بده.فکر نکنم چیز دشواری باشه دوستم:چشمک:

morteza271
دوشنبه 22 فروردین 1390, 11:40 صبح
منم نگفتم سخته!
ولی این کار باید همیشه انجام بشه دیگه، درسته؟(مثلا هر یه دقیقه من نیاز دارم این کار رو بکنم، به نظر شما این بهینه هست؟!)

نیما حتمی
دوشنبه 22 فروردین 1390, 11:52 صبح
هر یک دقیقه؟!بله از نظر بهینگی به نظر من مشکلی نداره.در یک تایمر قرار بده .فقط به این نکته دقت کن که تایمر قراره هر یک دقیقه یه جدولی رو آپدیت کنه که چه حجمی اطلاعات رو قراره در اون قرار بگیره؟ اگه حجم اطلاعات مناسب باشه بهینست

morteza271
دوشنبه 22 فروردین 1390, 11:58 صبح
به هر حال ممنونم ولی نه به نظر من بهینه نیست.
دوستان دیگه کسی نظری نداره؟

TeacherMath
دوشنبه 22 فروردین 1390, 12:50 عصر
سلام.یه کلاس درست کن در آن کارهای یک روز را بتونی ذخیره کنی .اگه در این روز کاری برای انجام دادن هست تایمر را به کار اندازید و کارها را بر اساس کلاسی که دارید انجام دهید.
این کار از مراجعه به دیتابیس جلوگیری می کند.اگر هم کاری به کارهای امروز اضافه کردی آن را به کلاست اضافه کن.

morteza271
دوشنبه 22 فروردین 1390, 12:56 عصر
ممنونم دوست عزیز.
ولی کارهای امروز رو کجا ذخیره کنم؟
برنامه هی باز و بسته میشه اگه جایی ذخیره نشن که از بین میرن دیگه!!!
میشه بیشتر راهنمایی کنید؟با تشکر

jalalx
دوشنبه 22 فروردین 1390, 12:57 عصر
روشی که TeacherMath فرمودن، نوعی Caching هست که برای اینطور مسایل، جهت جلوگیری از مراجعات زیاد به دیتابیس مورد استفاده قرار میگیره.

morteza271
دوشنبه 22 فروردین 1390, 13:11 عصر
روشی که TeacherMath فرمودن، نوعی Caching هست که برای اینطور مسایل، جهت جلوگیری از مراجعات زیاد به دیتابیس مورد استفاده قرار میگیره.
خوب به هر حال باید یه جایی ذخیره کنیم دیگه یا نه؟
لطف کنید بیشتر توضیح بدین.
با تشکر.

sarbaz_esf
دوشنبه 22 فروردین 1390, 13:40 عصر
دوست عزیز به این نکته هم توجه کن که بر اساس تاریخ و زمانی که در برنامه ات تعیین کردی ممکنه برنامه ات در ان تاریخ و زمان در حال اجرا نباشه واین هم خودش یه مشکله

morteza271
دوشنبه 22 فروردین 1390, 13:50 عصر
دوست عزیز به این نکته هم توجه کن که بر اساس تاریخ و زمانی که در برنامه ات تعیین کردی ممکنه برنامه ات در ان تاریخ و زمان در حال اجرا نباشه واین هم خودش یه مشکله

ممنونم دوست عزیز، بابت این نکته مشکلی نیست تدبیرات لازم انجام شده.
و فقط چگونگی انجام این امر مشکل من هست که نیاز به نظرات شما عزیزان دارم به طوریکه بهترین و بهینه ترین روش رو انجام بدم.
از همه دوستان که جواب میدن نهایت تشکر رو دارم و از تمامی دوستان خواهش میکنم نظرات خود رو بیان کنن.
با تشکر.

arta.nasiri
دوشنبه 22 فروردین 1390, 14:30 عصر
هر یک دقیقه؟!بله از نظر بهینگی به نظر من مشکلی نداره.در یک تایمر قرار بده .فقط به این نکته دقت کن که تایمر قراره هر یک دقیقه یه جدولی رو آپدیت کنه که چه حجمی اطلاعات رو قراره در اون قرار بگیره؟ اگه حجم اطلاعات مناسب باشه بهینست

سلام
دوست عزیز این روشی که شما فرمودین زیادم بهینه نیست! ما باید اینم در نظر داشته باشیم که اگه برنامه ما تحت شبکه باشه و تعداد کاربران در حال استفاده از برنامه هم زیاد باشه و هر یک دقیقه یک بار به سرور درخواست ارسال بشه روزانه برنامه ما مقدر زیادی از پهنای باند رو اشکال و مصرف میکنه.

و troski عزیز به این لینک هم یه نگاهی بکن شاید به دردت خورد

http://www.codeproject.com/KB/cs/tsnewlib.aspx

morteza271
دوشنبه 22 فروردین 1390, 15:23 عصر
ممنونم بابت جواب.

ولی از لینکی که گذاشتین چیزی نفهمیدم میشه یه خورده توضیح بدین.
با تشکر

arta.nasiri
دوشنبه 22 فروردین 1390, 16:35 عصر
ممنونم بابت جواب.

ولی از لینکی که گذاشتین چیزی نفهمیدم میشه یه خورده توضیح بدین.
با تشکر

سلام

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

در اینجا یک Task جدید به نام D Checker ایجاد میشه


Task t;
try {
t = st.CreateTask("D checker");
} catch (ArgumentException) {
Console.WriteLine("Task name already exists");
return;
}

این خط هم نام فایل اجرایی که قراره موقع استارت Task اجرا بشه رو میگیره به همراه پارامترهایی که واسه برنامت لازمه

t.ApplicationName = "chkdsk.exe";
t.Parameters = "d: /f";
t.Comment = "Checks and fixes errors on D: drive";

در این خط هم مشخصات یک اکانت رو میدیم که Task قراره توسط اون اکانت اجرا بشه ( همون اکانت ویندوز :لبخند: )

t.SetAccountInformation(@"THEDOMAIN\TheUser", "HisPasswd");

این خط هم میگه اگه سیستم بیشتر از 10 دقیقه هست که در حالت idle میتونی اجرا بشه

t.IdleWaitMinutes = 10;

به Task اجازه اجرا بیشتر از دو ساعت و نیم رو نمیده

t.MaxRunTime = new TimeSpan(2, 30, 0);

موقعی اجرا بشه که سیستم در حالت idle هست

t.Priority = System.Diagnostics.ProcessPriorityClass.Idle;

اینم تنظیم یک تاریخ مشخص برای اجرا Task میباشد

t.Triggers.Add(new WeeklyTrigger(6, 30, DaysOfTheWeek.Sunday));

و در آخر هم

t.Save()
t.Close();
st.Dispose();

morteza271
سه شنبه 23 فروردین 1390, 09:38 صبح
ممنونم دوست عزیز.
راستش چیز خاصی نفهمیدم، اصلا این کدها چجوری کار میکنن باید کجا بذارمشون؟!!!:گیج:
دوستان دیگه روشی ندارن؟!!!:متعجب:

vof.ir
چهارشنبه 24 فروردین 1390, 00:42 صبح
اگر شما میخواهید بر روی اطلاعاتی که روی دیتابیستون هست عملیاتی انجام دهید، و کامپیوتری که دیتابیس شما روی آن نصب هست دائم روشن می ماند می تونید از امکانات خود sql server (حدس می زنم که از sql استفاده میکنید شاید هم نه) استفاده کنید.
دقیق یادم نیست کدام قسمتش بود. اما مطمئنم که میشه.

morteza271
چهارشنبه 24 فروردین 1390, 12:54 عصر
آره با Sql کار میکنم و با اطلاعات درون جدول ها کار هم دارم.
ولی کارای اصلی برنامه رو سی شارپ باید انجام بده.

از همه دوستان ممنونم.
خودم یه یه روشی رسیدم با ساتفاده از تایمر توضیح میدم، هر کدوم از دوستان که نظری برای بهینه کردنش دارن بگن:

روش خودم با تایمر:
در ابتدای اجرای برنامه در صبح چک میکنم اگه برای امروز کاری نباشه که تایمر فعال نمیشه ولی اگر برای امروز کاری باشه زمان آنرا میخونم و فاصله آن زمان تا الان را به میلی ثانیه بدست آورده و سپس خاصیت Interval تایمر رو برابر عدد بدست آمده میکنم. و در رویداد تیک تایمر کار مورد نظر رو انجام میدم و دویاره همین پروسه رو انجام میدم.

حالا میخوام اگه روشی باشه همین رو بهینه تر کنم.
هر کی نظری داره لطف کنه دریغ نکنه.
با تشکر.