Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Базы данных под .NET > Какой из поисков быстрее?


Автор: Darkmaster 25.10.2007, 13:29
Возник такой вопросик, в локальной БД после отправи письма нужно проверить является ли email на который отправлено письмо email'ом клиента в базе. Так вот возник вопрос что лучше для этого использовать? Пока есть два варианта: в первом все адреса на которые только что было отправлено пиьсмо перебираются циклом for в котором есть  foreach проходящий по всей базе и сравнвающий нынешний  email с теми что есть в базе:

Код

  for (int i = 0; i < msg.To.Count; i++)
                {
                    foreach (DataRow dr in f1.dataTable1.Rows)
                    {
                        if (dr["email"].ToString() == msg.To[i].Address) // msg - это MailMessage
                        {
                            DataRow mailrow = f1.dataTable2.NewRow();
                            mailrow["linkkey"] = dr["key"];
                            ....
                         }

                    }
                 }


Второй способ воспользоваться datatabl1.Select(запрос), так вот хотелоь бы узнать что быстрее, имеет ли смысл вообще это искать а также как можно замерить. Визуально особой разницы в скорости нет, но тем не менее...

Автор: Wanderer2019 25.10.2007, 13:32
Напиши хранимую процедуру, в которую передавался бы этот адресс и она возвращала бы да или нет. 

Автор: Zapozidon 25.10.2007, 19:27
Проверить - поставить замер времени перед и после выполнения, но результат может быть неоднозначный. 
Разница скорее всего будет маленькая при небольших данных. Глобально же посоветовал бы следущее: в строчке кода 
Код

if (dr["email"].ToString() == msg.To[i].Address) // msg - это MailMessage 

осуществляются операции ToString(), соответственно, вылезут новые объекты, которые будет хавать сборщик мусора. А как уже устроен DataTable.Select - вопрос, но наверняка такого не будет. В случае если у Вас в dataTable1.Rows хранится миллион объектов, тогда будет лишних миллион строчек. Во втором случае скорее всего такого не будет (все опять же упирается в реализацию метода Select, но я верю в Microsoft, так пролабанить они не могут smile), так что я голосую за второй вариант.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)