Как определить размер в байтах результирующего набора из LINQ to SQL - PullRequest
2 голосов
/ 18 сентября 2008

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 19 сентября 2008

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

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

Ссылка на MSDN

1 голос
/ 25 февраля 2009

Примечание. Необходимо преобразовать соединение в SqlConnection, если у вас есть существующий DataContext

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

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

 ((SqlConnection)dc.Connection).RetrieveStatistics()
0 голосов
/ 25 февраля 2009

Я не нашел способа получить 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();
...