2009-05-03 8 views
0

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

Какой еще способ ускорить и требует меньше кода для написания, чем для получения одной записи?

User user2 = DB.Select().From(User.Schema) 
.Where(User.PasswordColumn).IsEqualTo(password) 
.And(User.SINumberColumn).IsEqualTo(siNumber) 
.ExecuteSingle<User>(); 

Я использовал для AntsProfiler инструмент для проверки, и это занимает СРЕДНЕМ из 29.12ms процессорного времени - тестирование более десяти трасс

Где, как это занимает еще больше времени

UserController uc = new UserController(); 
Query query = new Query("User"); 
query.WHERE(User.Columns.Password, password); 
query.WHERE(User.Columns.SINumber, siNumber); 
User user = uc.FetchByQuery(query).First<User>(); 

Только последний линия берет 256.08ms процессорного времени плюс UserController занимает 66.86ms.

Любые предложения?

ответ

1

IIRC, объект запроса свободно .. т.е.

query.WHERE(User.Columns.Password, password); 
query.WHERE(User.Columns.SINumber, siNumber); 

Следует читать как:

query = query.WHERE(User.Columns.Password, password); 
query = query.WHERE(User.Columns.SINumber, siNumber); 

Увеличение времени в тестах могут быть учтены из-за этого (вы спрашиваете для всех элементов пользователя, а затем захвата Первого).

3

«Узкое место» - это сгенерированный запрос, а не SubSonic, генерирующий его или возвращающий результат. Если какой-то конкретный запрос выполняется медленно, вы должны изучить возможность использования функций индексирования вашего провайдера базы данных для его оптимизации.

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

Таким образом, мой ответ был бы, первый способ - это лучший способ сделать это, и если 29 мс неприемлемо (что для вызова БД, я не думаю, что это необоснованно), добавьте некоторые индексы в вашей БД, чтобы ускорить поиск.

0

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

Возможно, вам нужно проверить, сколько времени требуется, чтобы получить результаты с помощью обычного старого SQLCommand и передать ему ваше соединение и параметры и посмотреть, сколько времени потребуется, чтобы вы имели сравнение.

 Смежные вопросы

  • Нет связанных вопросов^_^