![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| BufO |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 26.5.2011 Репутация: нет Всего: нет |
Всем привет! Искал по форуму, ничего толкового не нашел.
У меня такая проблема: есть БД в которой в которой фиксируется пеня и долг с пени. Долг+=Пеня. Этот подсчет должен происходить каждый день. Вопрос, как создать событие, происходящее раз в сутки ? Не ужели это можно сделать только Timer'ом и каждую секунду проверять изменение даты ? Просто в таблице ~10к записей и программа реально подтормаживает. Хотя бы подскажите в какую сторону копать. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
BufO, используйте для этих целей планировщик винды, это рекомендуемый майкрософтом способ подобных вещей.
а иначе да, while(true) {if (Datetime.Now>needDate) ... else Thread.Sleep(1*1000*x);} -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| BufO |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 26.5.2011 Репутация: нет Всего: нет |
спасибо. а как организовать взаимодействие с планировщиком ? как я понял планировщик будет запускать мой ехе и вызывать метод начисления?
не совсем понял зачем приостанавливать поток. и не понял почему такой параметр "1*1000*x". Это сообщение отредактировал(а) BufO - 26.5.2011, 11:14 |
||||
|
|||||
| likegift |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 14.10.2008 Репутация: нет Всего: 3 |
а зачем вам считать пени каждые сутки? считайте пени один раз, когда наступает время платить по долгам.
|
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
BufO, это можно еще повесить непосредственно на базу, в MSSQL к примеру есть такая штука как jod, он запускается в определенное время и выполняет требуемые скрипты, если данные хранятся только в базе, и нету никакой супер мега логики, в которой участвует не только база, но и какая то иная логика(типа твоего кода в программе, пользователя и пр.), то мне кажется проще сделать все в самой базе, работать я думаю будет быстрее намного, и код будет отделен от лишнего, типа база сама будет рулить своими данными. как это работает(и работает ли вообще) в других базах я не в курсе, не приходилось сталкиваться пока что. но если нету то остается только планировщик винды.
кстати, поток можно усыпить не на одну секунду, а на... разницу от текущего времени до требуемого, хотя отличия в производительности, мне кажется, будут незаметны. Это сообщение отредактировал(а) Экскалупатор - 26.5.2011, 11:49 |
|||
|
||||
| BufO |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 26.5.2011 Репутация: нет Всего: нет |
я бы рад так сделать, но в требованиях прописано что должен отображаться текущий долг.
Данные хранятся только в базе. Логика проста: Долг+=Пеня. Буду гуглить по этому делу. СУБД - Встроенный Огнептиц. Спасибо за направление поиска.
|
||||||
|
|||||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
можно, кстати, если нет аналога job в твоей базе, то повесить на планировщик винды запуск скрипта, который будет запускать хранимую процедуру в базе и база дальше будет сама обрабатывать данные, а прога твоя об этом вообще знать и думать не будет.
|
|||
|
||||
| likegift |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 14.10.2008 Репутация: нет Всего: 3 |
отображаться в базе или в интерфейсе? если в базе, то делайте джобом или тригером или как душе угодно, но если исключительно на интерфейсе.. |
||||
|
|||||
| BufO |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 9 Регистрация: 26.5.2011 Репутация: нет Всего: нет |
спасибо
|
||||
|
|||||
| likegift |
|
||||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 14.10.2008 Репутация: нет Всего: 3 |
ну, тогда я ваще понимаю зачем изобретать костыли и насиловать базу, если эта проблема решается в одно касание: считали из базы дату погашения кредита, отняли от текущей даты, умножили на процент пени и вывели в интерфейс. |
||||
|
|||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
я так понимаю что эти данных хранятся, а не считаются каждый раз, конечно смысла особого в этом нету, коль уж на то пошло то можно и при получении данных из базы посчитать все, в самом запросе. может быть там много считать надо а по сему выгоднее делать пересчет один раз в сутки и держать в базе значения, чем считать их каждый раз при выводе. Но это все лишь мои домыслы. |
|||
|
||||
| likegift |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 208 Регистрация: 14.10.2008 Репутация: нет Всего: 3 |
все имхо, но если там считать много надо, значит не правильно организована логика. если 10K строк за раз выводятся на экран, значит не правильно организован интерфейс. кстати, джобы и всякие таймеры могут отвалиться, а это не допустимо в деле, касающемся денег. |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 6 Всего: 118 |
да бросьте.. в банках есть такая целая процедура "закрытия дня" - ниче ж, работают... просто надо следить чтоб джоб не падал. А запустить его как я уже и говорил - путем планировщика винды дело трех минут. Можно и свой сервис расчета сделать (если чисто sql не нравится) - делаете сервис wcf , а планировщиком запускаете клиента который дает серверу команду "пересчет!" -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
| Экскалупатор |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1746 Регистрация: 1.4.2009 Где: г. Минск Репутация: 5 Всего: 24 |
likegift, отвалиться может все, тут все от рук зависит, так что это не повод.
по поводу 10к строк, то бывает всякое, конечно если только для вывода то это совсем не комильфо. но, можно предположить что человеку нужно вывести 100 строк из 10к, но при этом вывести общую сумму за все 10к строк, вот он и читает их все, что бы подсчитать. повторюсь ситуаций может быть очень много, и только ТС знает, что ему нужно и почему он так это делает а не по другому. |
|||
|
||||
| Yuretzzo |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 15 Регистрация: 12.1.2011 Где: Менск і Мінск... Репутация: нет Всего: нет |
Похожую задачу я решил, добавив в БД поле типа DateTime в которое записывал последню дату изменения. При начисленни долга просто кол-во дней между текущей датой и датой записаной в базе...потом просто: долг+=пеня*кол-во_дней.....правда у меня в БД в 10 таблицах было всего ~800 записей.
|
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | .NET для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |