Низкая производительность LINQ в Windows 7 - PullRequest
2 голосов
/ 20 сентября 2011

У меня есть приложение .net 3.5, работающее в производстве на Windows XP x86 dualcore. Я сейчас установил приложение на Windows 7 x64, четырехъядерный с гиперпоточностью. Приложение представляет собой графический интерфейс, который связывается через WCF со службой Windows, которая связывается с SQLExpress 2008 R2 через Linq2Sql. Мы также используем Виндзорский замок для инъекций зависимости / IoC

Определенная инструкция Linq2Sql в среде XP занимает около 1,5-2 секунд. В Windows 7 этот параметр занимает около 5-7 секунд. Я запустил SQL Server Profiler и монитор ресурсов, и кажется, что приложение ждет около 5 секунд, а затем запускает сам SQL-запрос. таким образом, задержка, кажется, происходит ниже моего Datacontext и перед базой данных

Я пробовал следующее:

  • изменил строку подключения для аутентификации sql
  • отключил сетевой кабель
  • удалил антивирус
  • отключено LLMNR
  • Удален IPv6 на сетевых картах
  • добавлены транзакции с чтением незафиксированных в коде
  • попытался добавить блокировки (многопоточное окружение)
  • пытался прикрепить приложение к одному процессору
  • запустить от имени администратора

Моя теория заключается в том, что время истекает, но что?!?

Ответы [ 2 ]

1 голос
/ 20 сентября 2011

Я думаю, вам придется медленно добавлять код, чтобы найти проблему - разделяй и властвуй.

Если это фактический запрос к базе данных, который занимает время, то это на самом деле не относится к вашему приложению на Win 7 против Win XP. Насколько быстро выполняется этот запрос при непосредственном обращении к базе данных? Если это быстро, поднимите стек вызовов ...

Как быстро работает служба Windows? Можете ли вы сделать запрос на него, и посмотреть, как быстро это?

Насколько быстро слой WCF? Можете ли вы ударить прямо и увидеть, что это медленно? Тогда вы нашли своего виновника.

Далее, к вашему интерфейсу - медленно, если вы создаете небольшое тестовое приложение, которое работает в нижней части приложения? Если нет, продолжайте двигаться вверх.

В конце концов, это можно легко сделать, добавив операторы регистрации сверху вниз, чтобы вы могли изолировать проблему, как предложено @ Jan

0 голосов
/ 03 ноября 2011

При установке целевой платформы на x86 вместо AnyCPU программа ведет себя как положено. Таким образом, проблема заключается в том, что Linq2Sql и x64 на самом деле не играют вместе. Я не знаю, сможем ли мы получить это как ошибку, но она ведет себя плохо в любом случае.

...