Как определить размер в байтах результирующего набора из LINQ в SQL
-
01-07-2019 - |
Вопрос
При написании SQL вручную довольно легко оценить размер и форму данных, возвращаемых запросом.Мне все труднее делать это с помощью запросов LINQ to SQL.Иногда я нахожу НАМНОГО больше данных, чем ожидал, что может действительно замедлить работу удаленного клиента, который обращается к базе данных напрямую.
Я хотел бы иметь возможность запустить запрос, а затем точно указать, сколько данных было возвращено по сети, и использовать это для оптимизации.
Я уже подключил журнал, используя DataContext.Метод Log, но это дает мне представление только об отправленном SQL, а не о полученных данных.
Есть какие-нибудь советы?
Решение
Похоже, вы можете использовать SqlConnection вашего DataContext и включить статистику.
Одна из статистических данных - "возвращенные байты".
Другие советы
Примечание:Вам нужно привести соединение к 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();