Как оптимизировать LinqToSQL в c # - PullRequest
0 голосов
/ 13 августа 2010

Я пытаюсь обновить приблизительно 150 000 записей в таблице в SQL 2005 с помощью linq2sql. Когда дело доходит до xx.SubmitChanges (), это занимает около 45 минут.

Я запускаю sql как локальный экземпляр на четырехъядерном ПК.

Кто-нибудь знает, почему это так долго? или это нормально?

Пример кода:

var y = db.x.Where(j => j.NumberOfOrders > 0).Select(k => k);

foreach (var item in y)
{
    try
    {
        item.k = "bla";
    }
    catch (Exception ex)
    {
        //
    }
}

db.SubmitChanges();

Ответы [ 3 ]

5 голосов
/ 13 августа 2010

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

Если у вас большая запись, например, 150 000 записей. Лучше использовать Массовая вставка в sql. Это займет всего лишь доли секунды, чтобы вставить.

2 голосов
/ 13 августа 2010

Вам не нужен Select (), потому что он проецирует ту же вещь, что и Where ()

И нет необходимости использовать try-catch для простого задания.

Но определенно лучшее, что нужно сделать, это Bulk Insert Stuff, о котором говорит anishmarokey

1 голос
/ 13 августа 2010

Большое обновление, такое как это, будет выполнено с помощью запроса UPDATE (или хранимого процесса), который может использовать базу данных для выполнения тяжелой работы (и управления транзакциями / согласованности).Я знаю, что вы упрощаете пример, но что-то вроде этого:

string CommandText = "UPDATE x SET k = @k WHERE NumberOfOrders > 0";
using (SqlConnection conn = new SqlConnection(My.Settings.DatabaseConnection)) {
    using (SqlCommand cmd = new SqlCommand(CommandText, conn)) {
        cmd.Parameters.AddWithValue("@k", "bla");
        conn.Open();
        cmd.ExecuteNonQuery();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...