dev.net.ua

Українська Спільнота Розробникiв
 
Ласкаво просимо до dev.net.ua Увійти | Приєднатися | Допомога | Увійти Live ID
в Пошук

SqlServer Batch operations & memory usage

Останнє повідомлення 28-01-2008, 10:34 від kosinsky. 2 відповіді.
Сортувати: Попереднє Наступне
  •  27-01-2008, 4:15 5262

    SqlServer Batch operations & memory usage

    Уважаемые коллеги,
    возникла необходимость выполнить операцию множественного вызова в БД хранимой процедуры для Sql Server 2000.

    Сейчас это делается вызовом ExecuteNonQuery для каждого набора параметров.

    Попробовал сделать один вызов:

           StringBuilder sb = new StringBuilder
            for (int i = 0; i < num; i++)
            {
                sb.AppendFormat("exec StoredProcedure1 '{0}';", NextName());
            }      
            cmd.CommandText = sb.ToString();
            cmd.ExecuteNonQuery();



    Операция отработала быстрее, но вот есть сомнения, что этот метод чем-то плох.
    К примеру для длинного CommandText, возможно, идет большой перерасход памяти?
    Причём память нужно учитывать и на клиенте и на сервере.

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

    Вопрос довольно срочный, надеюсь на помщь Wink


    Лучше побыть дураком 5 минут, чем остаться им на всю жизнь ...
  •  28-01-2008, 2:28 5267 у відповідь на 5262

    Re: SqlServer Batch operations & memory usage

    Уважаемый коллега,
    Свяжись, пожалуйста, со мной.

    Вопрос довольно срочный, надеюсь на помщь Wink

  •  28-01-2008, 10:34 5269 у відповідь на 5262

    Re: SqlServer Batch operations & memory usage

    Если выполнять в цикле, отсылку по одной команде, то т.к. сборщик мусора не будет работать мгновенно, то существует большая вероятность того, что тот же объем памяти будет занять на много мелких строк. У такого подхода есть один существенный не достаток это SQL Injection вы должны быть на 100% уверенны в том, что функция NextName() не вернет "хитрых" данных.

     

    В программе память можно отследить при помощи статического свойства Environment.WorkingSet или метода GC.GetTotalMemory(false)

Переглядати як новосний Блог RSS в XML