C # SqlCommand передаваемый размер байта - PullRequest
2 голосов
/ 07 сентября 2011

Я пишу клиент Sql на C # и хотел бы иметь возможность отслеживать использование данных команд Sql в одной точке. Из того, что я могу сказать, нет простого способа сделать это.

Моя функция получения данных от SqlCommand выглядит примерно так:

private static void ExecuteReaderCallback(IAsyncResult async)
{
    DBReqWrapper RequestObject = (DBReqWrapper)async.AsyncState;
    SqlDataReader ResponseReader = command.EndExecuteReader(async);
    if (ResponseReader.HasRows)
    {
          while (ResponseReader.Read())
         {
              object[] NewResponse = new object[ResponseReader.FieldCount];
              ResponseReader.GetValues(NewResponse);

              // Processing omitted
         }
    }

    ResponseReader.Close();
}

То, что я не думаю, будет работать:

  1. Сериализация данных для определения размера. Слишком медленно, особенно для больших запросов.
  2. SizeOf. Мы имеем дело с объектами неизвестного типа.
  3. Marshal.sizeof. Мы имеем дело с управляемыми объектами.
  4. Проверка общего объема памяти приложения. Это многопоточное приложение, в котором будет обрабатываться много одновременных запросов, а общее количество памяти будет ненадежным.
  5. SqlDataReader :: GetBytes (). Эта команда действительна только для подмножества типов.

Любая помощь приветствуется, спасибо!

1 Ответ

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

Если вы хотите посчитать, сколько данных передается по сети, ни один из них не будет работать.SQL Server использует в качестве проводного формата на уровне приложения протокол TDS ( Табличный поток данных ).

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...