PDA

View Full Version : سوال: اجرا کردن کدی در سی شارپ در تاریخ خاص



shafagh_82
یک شنبه 28 تیر 1388, 12:16 عصر
سلام!
من می خوام برای اطلاعاتی که در یک سطر از جدول دیتابیسم ذخیره کردم و هر سطر یک تاریخ هم براش ذخیره شده, در اون تاریخ خاص کدی در سی شارپ اجرا بشه! مثلا فرض کنید می خوام در تاریخ مشخصی که مدیر برنامه وارد می کنه, پیام خاصی که اون رو هم مدیر برنامه وارد می کنه به ایمیل یکی از اعضای برنامه ارسال بشه, حالا من باید تاریخ رو هم در دیتابیس ذخیره کنم یا این که راه دیگه ای هم هست؟ (گفتم برنامه, به خاطر اینکه پروژه من سایت نیست و یک اپلیکیشنه که قراره به اینترنت وصل شه و این کارو انجام بده!)
ممنون!:قلب:

bahar_engineer
یک شنبه 28 تیر 1388, 12:46 عصر
بله شما باید تاریخ مورد نظر رو توی دیتابیس ذخیره کنید و یه تایمر توی برنامه می ذارین که تاریخ هر روز سیستم رو چک می کنه و زمانی که تاریخ سیستم با تاریخی که توی بانک هست برابر شده اون عملیات انجام بشه

کار خاصی نداره راحته

اگه سوالی بود در خدمتم

shafagh_82
یک شنبه 28 تیر 1388, 13:44 عصر
از پاسخ شما خیلی ممنونم! ولی مشکل من اینه که تعداد این تاریخ ها اصلا مشخص نیست! و مشکل دوم هم اینه که علاوه بر تاریخ ارسال ساعت و دقیقه ارسال هم دارم! یعنی من باید تایمری ایجاد کنم که هر دقیقه اتفاق بیفته و بعد تمام تاریخ های ارسال و ساعات ارسال را از دیتابیس بگیرد و با تاریخ و ساعت و دقیقه جاری تطبیق دهد و عمل مورد نظر راانجام دهد! من فکر می کنم که یک بار پردازشی خیلی بالا به سیستم تحمیل می کند! دنبال راهکار بهتری بودم! یا حتی پیشنهاد بهتری که بتواند تعریف نیازمندی من را کمی بهبود ببخشد! یعنی کمی تغییر در صورت مسئله به شرطی که بتواند بار پردازشی تحمیلی به سیستم در حالت بالا را کمی بهبود ببخشد!
باز هم ممنون!:قلب:

naeeme
یک شنبه 28 تیر 1388, 14:02 عصر
من الان یه ایده به ذهنم میرسه که فرصت نوشتن کد و اجرا کردنش رو ندارم. اما فکر کنم وقتی بیانش کنم، ایده نزدیک به راه حل صحیح رو به شما بده.

بیایم این جور فکر کنیم که زمان رخ دادن رویداد تایمر رو شما متغیر تعریف کنین نه ثابت. منظورم اینه که تعریف نکین هر 10 دقیقه یک بار اتفاق بیافته. بلکه طوری تعریفش کنین که اولین رویداد اتفاق افتاده دقیقا زمانی باشه که قرار هست شما پیغامی رو ارسال کنین.
حالا منظورم چیه؟ دقیقا منظورم این هست که شما در اولین اجرای برنامه بیاید و نزدیکترین زمان برای ارسال پیام رو پیدا کنین، اختلاف زمان حالا و زمانی که باید اون پیام رو ارسال کنین رو به دست بیارین و تایمرتون رو برای اون اختلاف زمانی ست کنین. مثلا نزدیکترین پیام 2 دقیقه دیگه هست، حالا دوره تایمر رو شما برای 2 دقیقه تعریف کنین. دو دقیقه دیگه که رویداد تایمر اتفاق افتاد، شما بیاید نزدیکترین پیام رو مجددا پیدا کنین و تایمرتون رو دوباره همینجوری ست کنین و بعد پیامتون رو ارسال کنین.
فکر کنم اینجوری بار کمتری رو پردازنده و عملیات IO بسیار کمتری هم خواهید داشت.

shafagh_82
سه شنبه 30 تیر 1388, 08:56 صبح
باسلام! از راهنماییتون خیلی ممنون!:قلب:

sd.CSharpProgrammer
سه شنبه 30 تیر 1388, 10:05 صبح
با سلام خدمت همه دوستان
با اجازه اساتيد من هم يك نظر بدم. دوست عزيز شما ميتوني در كنار اپليكيشنت يك اپليكيشن كوچيك بطور جداگانه تعريف كني كه هر بار ويندوز بالا مياد اجرا بشه. اين اپليكيشن وقتي اجرا ميشه بياد تمام تاريخ ها و ساعت ها رو از ديتابيس بخونه و داخل يك آرايه يا يك كلكسيون بريزه و بعد از اينكار ديگه با ديتابيس كاري نداشته باشه. و بعد انجام اين مرحله همونطور كه دوستان گفتند بياد با يه تايمر كه هر ثانيه اجرا ميشه تاريخ و ساعت ها رو چك كنه تا در زمان مناسب پيغام مورد نظر رو به ايميل ها بفرسته.

موفق باشي

naeeme
سه شنبه 30 تیر 1388, 11:01 صبح
در كنار اپليكيشنت يك اپليكيشن كوچيك بطور جداگانه تعريف كني كه هر بار ويندوز بالا مياد اجرا بشه
نوشتن یک سرویس ویندوز برای انجام اینکار راه حل بسیار مناسبیه. چون وابستگی به انسان رو از بین میبره.


بياد با يه تايمر كه هر ثانيه اجرا ميشه تاريخ و ساعت ها رو چك كنه
می دونین این روش چقدر به سیستم فشار میاره و سربار ایجاد می کنه؟


بياد تمام تاريخ ها و ساعت ها رو از ديتابيس بخونه و داخل يك آرايه يا يك كلكسيون بريزه
امکان داره فضای زیادی از حافظه رو بگیره. در ضمن اگر تعدادش بالا بره، هر نوع کلکسیونی نمی تونه اون رو به سرعت پردازش کنه و زمان بر میشه.

shafagh_82
سه شنبه 30 تیر 1388, 14:41 عصر
سلام! در جواب اون دوستمون که گفتند که یک اپلیکیشن جدا بنویس که یک بار دیتاهارو بخونه و ... باید بگم که این کار امکانپذیر نیست چون این دیتاها در حال تغییر و تحولند و در طول روز ممکن است که هر لحظه رکوردهایی به اون اضافه بشه که تاریخ ارسال اونها چند ساعت آینده روز جاری باشه! این نوع پیامها به موقع ارسال نمی شوند!