Как определить размер в байтах результирующего набора из LINQ в SQL

StackOverflow https://stackoverflow.com/questions/96211

Вопрос

При написании SQL вручную довольно легко оценить размер и форму данных, возвращаемых запросом.Мне все труднее делать это с помощью запросов LINQ to SQL.Иногда я нахожу НАМНОГО больше данных, чем ожидал, что может действительно замедлить работу удаленного клиента, который обращается к базе данных напрямую.

Я хотел бы иметь возможность запустить запрос, а затем точно указать, сколько данных было возвращено по сети, и использовать это для оптимизации.

Я уже подключил журнал, используя DataContext.Метод Log, но это дает мне представление только об отправленном SQL, а не о полученных данных.

Есть какие-нибудь советы?

Это было полезно?

Решение

Похоже, вы можете использовать SqlConnection вашего DataContext и включить статистику.

Одна из статистических данных - "возвращенные байты".

Справочная ссылка MSDN

Другие советы

Примечание:Вам нужно привести соединение к SqlConnection, если у вас есть существующий DataContext

 ((SqlConnection)dc.Connection).StatisticsEnabled = true;

затем извлеките статистику с помощью :

 ((SqlConnection)dc.Connection).RetrieveStatistics()

Я не нашел способа захватить SqlConnection из DataContext, поэтому я создал SqlConnection вручную:

SqlConnection sqlConnection = new SqlConnection("your_connection_string");
// enable statistics
cn.StatisticsEnabled = true;

// create your DataContext with the SqlConnection
NorthWindDataContext nwContext = new NorthWindDataContext(sqlConnection);

var products = from product in nwContext
               where product.Category.CategoryName = "Beverages"
               select product;
foreach (var product in products)
{
    //do something with product
}

// retrieve statistics - for keys see http://msdn.microsoft.com/en-us/library/7h2ahss8(VS.80).aspx
string bytesSent = sqlConnection.RetrieveStatistics()["BytesSent"].ToString();
string bytesReceived = sqlConnection.RetrieveStatistics()["BytesReceived"].ToString();
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top