Некоторые идеи.
MSMQ ( Microsoft Message Queue )
Вы можете удалить поток из MSMQ и обновить метрики влетать.Если вам нужно сохранить эти события для последующей обработки, вы можете поместить их в базу данных по мере их удаления из очереди.MSMQ демонстрирует гораздо лучшую масштабируемость в этих сценариях - особенно когда издатель и подписчик имеют асимметричные скорости обработки;и используются двоичные данные (так как SQL может затормозиться с выделением пространства для VARBINARY
или выделением / разделением страниц для индексов).
Два других сценария SQL дополняют этот - вы все еще можетеиспользовать снятие очереди для вставки в SQL;чтобы избежать каких-либо сбоев в моделировании, пока SQL выделяет пространство.
Вы можете в некоторой степени обойти то, что сказал @Aliostad, используя этот.
OLAP ( Аналитическая обработка в режиме онлайн )
Похоже, вы могли бы извлечь выгоду из OLAP (кубы и т. Д.).Это увеличит общее время выполнения вашей симуляции, но улучшит ценность данных.К сожалению, это означает, что нужно потратить деньги на одну из самых больших редакций SQL.
Хранимые процедуры
Хотя Linq-to-SQL отлично подходит для «среднего разработчика», пожалуйста, продолжайтеот этого в научных проектах.Существует множество замечательных приемов, которые вы можете использовать в сыром TSQL, в дополнение к возможности проверки плана запросов.Если вы хотите максимально возможной производительности, тщательно спланируйте свою БД и создайте хранимые процедуры / UDF для агрегирования ваших данных.
Если вы можете рассчитать только некоторые показатели в C #, сделайте столько же работы в SQL заранее -и затем не стесняйтесь использовать Linq-to-SQL для захвата данных.
Также помните, что если вы вставляете в конец MSMQ, вы можете агрессивно индексировать, что ускорит ваши вычисления метрик, не влияя на вашу симуляцию.
Я бы включил SQL только в том случае, если существует реальная потребность в более эффективном использовании памяти (т. Е. У вас фактически не хватает).
Файлы с отображением в памяти
Это позволяет компенсировать давление памяти на диск;с потерей производительности, если его нужно «выгружать» обратно.
В целом
Я мог бы избежать Linq для определения основных метрик - сделать это в SQL.MSMQ, без сомнения, огромный победитель в этом деле.Не переусердствуйте с проблемой памяти и держите ее в .Net, если у вас не хватает памяти.