Повышение скорости приложения моделирования на основе .Net - PullRequest
3 голосов
/ 12 мая 2011

Мы разрабатываем один аналитический инструмент моделлинга акций в .Net.

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

Основной рабочий процесс кода: 1. Извлечение данных из базы данных.2. Для каждой даты Обработайте данные (запустите производство и модель запаса). 3. После того, как пройдены все даты, обновите все данные вместе в базе данных.

Итак, в основном, это только два вызова базы данных, и первоначально мы принимаем вседанные в наборах данных, а затем мы обрабатываем их в Ram и не выполняем вызовы базы данных.

Проблема, с которой мы столкнулись, заключалась в том, что на запуск модели в течение 1 года ушло почти час.Наш тест - запустить модель в течение 5 лет за 5 минут.

Мы работаем над этой проблемой уже почти месяц.Прямо сейчас мы смогли достичь работающей модели за 1 год за 10 минут.Ниже приведены вещи, которые мы узнали.- При извлечении данных из набора данных, если таблицы содержат данные всех пяти лет, было сложно работать с ними, поэтому мы разделили наборы данных по месячным циклам, и теперь мы запускаем модель по месяцам за раз.Это дало нам максимальное улучшение в скорости.- Попытка уменьшить петли внутри модели, которая работает ежедневно.Это не дало нам большого улучшения.

Вы можете скачать один файл rar по следующей ссылке.http://dl.dropbox.com/u/4546390/iPlanner.rar

Содержит три файла.

iPlanner Tables.xls: который дает представление о дизайне базы данных.iPlanner Logic.xls: рассказывает о таблице и логике модели производства, модели отгрузки и обработки фактической стоимости.Я думаю, что наиболее важным является рассмотрение производственной модели, это даст вам краткое представление о том, что модель делает ежедневно.

Common.cs: в которой есть функция Call Production Model, с которой все начинается.Вы также можете это проверить.

Модель ранее была написана в Excel, в Excel она использовалась в течение 2 минут в течение 5 лет.Причина перехода на .Net состоит в том, чтобы иметь больше возможностей для обмена и иметь программное обеспечение, похожее на внешний вид.

Я пытаюсь выяснить, как это можно улучшить.

Дайте мне знать, если потребуется дополнительная информация по этому вопросу.

Заранее спасибо

Ответы [ 2 ]

2 голосов
/ 12 мая 2011

Первый: профиль; p

Следующее, что я попробую, это вывести DataTable из системы в пользу строго типизированных классов, которые точно соответствуют вашим данным.Хотя скорость загрузки данных не является проблемой, я бы использовал что-то вроде dapper-dot-net, чтобы сделать загрузку данных максимально эффективной.

С DataTable, доступом для каждого члена является косвенным и должен проходить через внутренний поиск, возможно, с участием бокса в пути.Вырежьте все это, используя статическую привязку к фактическим свойствам данных (которые почти всегда встроены в поля).К сожалению, это немного сложно измерить в качестве оценочного воздействия, так как нетривиально.

2 голосов
/ 12 мая 2011

Если вычисления, выполненные для каждой даты, независимы, это звучит как хорошее приложение map / lower Насколько вы исследовали идею распараллеливания этого вычисления? Шестьдесят процессоров Hadoop, по одному на каждый месяц в пятилетнем окне, могут с этим справиться.

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