Linq to SQL и данные в реальном времени - PullRequest
0 голосов
/ 05 июня 2010

У меня есть приложение, которое должно постоянно (каждые 50 мс) вызывать действие MVC и получать / отбирать данные.

Я использую Linq для SQL и MVC из-за того, насколько они простыреализовать, и я знаю, что они не идеальны, когда речь идет о производительности, но она работает относительно хорошо, но лучшая скорость, которую я могу получить с моим текущим подходом, составляет 200 мс (без перекрытия запросов).

Каждый вызовна сайт создаст новый экземпляр datacontext, запросит / вставит его и вернет эти данные.

Есть ли способ сделать datacontext статичным, но submitchanges говорят каждые 5 секунд, так что я в значительной степенипопадание в версию данных в памяти?

Редактировать:

Я построил полностью отключенную архитектуру, которая содержит все те же свойства и объекты моего контекста, и яСтатически объявляйте этот объект в application_start () и при каждом запросе X запускается поток, который присоединяет все отключенные объекты и сохраняет его в базе данных.ase.

Это позволило мне сократить время прохождения туда и обратно до 100 мс, что является большим улучшением, но, тем не менее, ему не хватает того, что необходимо для «реального времени»

I 'Я достигаю уровня микрооптимизации, но я не могу подтолкнуть его быстрее.

Ответы [ 3 ]

1 голос
/ 05 июня 2010

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

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

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

0 голосов
/ 05 июня 2010

Я не думаю, что создание контекста / запросов LINQ является вашим узким местом здесь. Его использование немного (как и любой ORM), но оно не должно быть значимым для вас, если вы не создаете много контекстов и сложных деревьев запросов.

Возможно, я думаю, что LINQ не генерирует ожидаемый вами запрос. На самом деле он может генерировать кучу запросов, если вы не будете осторожны, и попытаться извлечь из нескольких таблиц. Если вы хотите узнать, какие запросы он выполняет, вы можете использовать

context.Log = Console.Out; // Or some other stream

Вы также можете использовать превосходный LINQPad , чтобы проверить свои запросы. Если это не проблема, вы должны профилировать свой код с помощью профилировщика, мне лично нравится dotTrace .

0 голосов
/ 05 июня 2010

CompiledQuery может помочь с производительностью. Но это никогда не будет быстрее, чем классический ADO.NET. Если производительность является основной проблемой, любой ORM - очень плохой выбор.

Вы всегда можете смешивать их (Linq2SQL + ADO.NET) для достижения оптимальной производительности.

...