Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> C# Событие, происходящее раз в сутки, как создать? 
V
    Опции темы
BufO
Дата 26.5.2011, 10:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 26.5.2011

Репутация: нет
Всего: нет



Всем привет! Искал по форуму, ничего толкового не нашел. 
У меня такая проблема: есть БД в которой в которой фиксируется пеня и долг с пени. Долг+=Пеня. 
Этот подсчет должен происходить каждый день. 
Вопрос, как создать событие, происходящее раз в сутки ? Не ужели это можно сделать только Timer'ом и каждую секунду проверять изменение даты ?  smile 
Просто в таблице ~10к записей и программа реально подтормаживает. Хотя бы подскажите в какую сторону копать.
PM MAIL   Вверх
jonie
Дата 26.5.2011, 10:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



BufO, используйте для этих целей планировщик винды, это рекомендуемый майкрософтом способ подобных вещей.
а иначе да, while(true) {if (Datetime.Now>needDate) ... else Thread.Sleep(1*1000*x);}


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
BufO
Дата 26.5.2011, 11:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 26.5.2011

Репутация: нет
Всего: нет



Цитата(jonie)
BufO, используйте для этих целей планировщик винды, это рекомендуемый майкрософтом способ подобных вещей.

спасибо. а как организовать взаимодействие с планировщиком ? как я понял планировщик будет запускать мой ехе и вызывать метод начисления? 
Цитата(jonie)
а иначе да, while(true) {if (Datetime.Now>needDate) ... else Thread.Sleep(1*1000*x);}

не совсем понял зачем приостанавливать поток. и не понял почему такой параметр "1*1000*x".

Это сообщение отредактировал(а) BufO - 26.5.2011, 11:14
PM MAIL   Вверх
likegift
Дата 26.5.2011, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



а зачем вам считать пени каждые сутки? считайте пени один раз, когда наступает время платить по долгам.
PM MAIL   Вверх
Экскалупатор
Дата 26.5.2011, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



BufO, это можно еще повесить непосредственно на базу, в MSSQL к примеру есть такая штука как jod, он запускается в определенное время и выполняет требуемые скрипты, если данные хранятся только в базе, и нету никакой супер мега логики, в которой участвует не только база, но и какая то иная логика(типа твоего кода в программе, пользователя и пр.), то мне кажется проще сделать все в самой базе, работать я думаю будет быстрее намного, и код будет отделен от лишнего, типа база сама будет рулить своими данными. как это работает(и работает ли вообще) в других базах я не в курсе, не приходилось сталкиваться пока что. но если нету то остается только планировщик винды.

Цитата(BufO @  26.5.2011,  09:14 Найти цитируемый пост)
каждую секунду проверять изменение даты

кстати, поток можно усыпить не на одну секунду, а на... разницу от текущего времени до требуемого, хотя отличия в производительности, мне кажется, будут незаметны.


Это сообщение отредактировал(а) Экскалупатор - 26.5.2011, 11:49
PM MAIL ICQ   Вверх
BufO
Дата 26.5.2011, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 26.5.2011

Репутация: нет
Всего: нет



Цитата(likegift)
а зачем вам считать пени каждые сутки? считайте пени один раз, когда наступает время платить по долгам.

я бы рад так сделать, но в требованиях прописано что должен отображаться текущий долг.
Цитата(Экскалупатор)
BufO, это можно еще повесить непосредственно на базу, в MSSQL к примеру есть такая штука как jod, он запускается в определенное время и выполняет требуемые скрипты, если данные хранятся только в базе, и нету никакой супер мега логики, в которой участвует не только база, но и какая то иная логика(типа твоего кода в программе, пользователя и пр.), то мне кажется проще сделать все в самой базе, работать я думаю будет быстрее намного, и код будет отделен от лишнего, типа база сама будет рулить своими данными. как это работает(и работает ли вообще) в других базах я не в курсе, не приходилось сталкиваться пока что. но если нету то остается только планировщик винды.

Данные хранятся только в базе. Логика проста: Долг+=Пеня. Буду гуглить по этому делу. СУБД - Встроенный Огнептиц. Спасибо за направление поиска.
Цитата(Экскалупатор)
кстати, поток можно усыпить не на одну секунду, а на... разницу от текущего времени до требуемого, хотя отличия в производительности, мне кажется, будут незаметны.
 по пробуем.


PM MAIL   Вверх
Экскалупатор
Дата 26.5.2011, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



можно, кстати, если нет аналога job в твоей базе, то повесить на планировщик винды запуск скрипта, который будет запускать хранимую процедуру в базе и база дальше будет сама обрабатывать данные, а прога твоя об этом вообще знать и думать не будет.
PM MAIL ICQ   Вверх
likegift
Дата 26.5.2011, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



Цитата(BufO @ 26.5.2011,  15:17)
Цитата(likegift)
а зачем вам считать пени каждые сутки? считайте пени один раз, когда наступает время платить по долгам.

я бы рад так сделать, но в требованиях прописано что должен отображаться текущий долг.

отображаться в базе или в интерфейсе?
если в базе, то делайте джобом или тригером или как душе угодно, но если исключительно на интерфейсе..
PM MAIL   Вверх
BufO
Дата 26.5.2011, 13:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 9
Регистрация: 26.5.2011

Репутация: нет
Всего: нет



Цитата(Экскалупатор @ 26.5.2011,  12:45)
можно, кстати, если нет аналога job в твоей базе, то повесить на планировщик винды запуск скрипта, который будет запускать хранимую процедуру в базе и база дальше будет сама обрабатывать данные, а прога твоя об этом вообще знать и думать не будет.

спасибо  smile 
Цитата(likegift @ 26.5.2011,  12:50)
...исключительно на интерфейсе..


PM MAIL   Вверх
likegift
Дата 26.5.2011, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



Цитата(BufO @ 26.5.2011,  16:27)
Цитата(likegift @ 26.5.2011,  12:50)
...исключительно на интерфейсе..



ну, тогда я ваще понимаю зачем изобретать костыли и насиловать базу, если эта проблема решается в одно касание: считали из базы дату погашения кредита, отняли от текущей даты, умножили на процент пени и вывели в интерфейс.
PM MAIL   Вверх
Экскалупатор
Дата 26.5.2011, 13:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



Цитата(BufO @  26.5.2011,  09:14 Найти цитируемый пост)
есть БД в которой в которой фиксируется пеня и долг с пени.

я так понимаю что эти данных хранятся, а не считаются каждый раз, конечно смысла особого в этом нету, коль уж на то пошло то можно и при получении данных из базы посчитать все, в самом запросе. может быть там много считать надо а по сему выгоднее делать пересчет один раз в сутки и держать в базе значения, чем считать их каждый раз при выводе.
Но это все лишь мои домыслы.
PM MAIL ICQ   Вверх
likegift
Дата 26.5.2011, 14:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 208
Регистрация: 14.10.2008

Репутация: нет
Всего: 3



Цитата(Экскалупатор @ 26.5.2011,  16:52)
может быть там много считать надо а по сему выгоднее делать пересчет один раз в сутки и держать в базе значения, чем считать их каждый раз при выводе.

все имхо, но если там считать много надо, значит не правильно организована логика. если 10K строк за раз выводятся на экран, значит не правильно организован интерфейс. 
кстати, джобы и всякие таймеры могут отвалиться, а это не допустимо в деле, касающемся денег.

PM MAIL   Вверх
jonie
Дата 26.5.2011, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 6
Всего: 118



Цитата(likegift @  26.5.2011,  14:00 Найти цитируемый пост)

кстати, джобы и всякие таймеры могут отвалиться, а это не допустимо в деле, касающемся денег.

да бросьте.. в банках есть такая целая процедура "закрытия дня" - ниче ж, работают... просто надо следить чтоб джоб не падал. А запустить его как я уже и говорил - путем планировщика винды дело трех минут.

Можно и свой сервис расчета сделать (если чисто sql не нравится) - делаете сервис wcf , а планировщиком запускаете клиента который дает серверу команду "пересчет!"


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Экскалупатор
Дата 26.5.2011, 14:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1746
Регистрация: 1.4.2009
Где: г. Минск

Репутация: 5
Всего: 24



likegift, отвалиться может все, тут все от рук зависит, так что это не повод.

по поводу 10к строк, то бывает всякое, конечно если только для вывода то это совсем не комильфо. но, можно предположить что человеку нужно вывести 100 строк из 10к, но при этом вывести общую сумму за все 10к строк, вот он и читает их все, что бы подсчитать. повторюсь ситуаций может быть очень много, и только ТС знает, что ему нужно и почему он так это делает а не по другому.
PM MAIL ICQ   Вверх
Yuretzzo
Дата 26.5.2011, 16:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 15
Регистрация: 12.1.2011
Где: Менск і Мінск...

Репутация: нет
Всего: нет



Похожую задачу я решил, добавив в БД поле типа DateTime в которое записывал последню дату изменения. При начисленни долга просто кол-во дней между текущей датой и  датой записаной в базе...потом просто: долг+=пеня*кол-во_дней.....правда у меня в БД в 10 таблицах было всего ~800 записей. 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.2018 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.