如何检查 LinqToSql DataContext 运行 有多少查询?
How can I Check how many queries a LinqToSql DataContext ran?
有什么方法可以检查 DataContext
运行 有多少数据库查询?
我知道我可以 运行 sql profiler
但我想分析一个包含数百个查询的大项目。
如果没有,是否有任何有用的事件可以注册并计算它们?
我正在寻找这样的东西:
using(DataContext ctx = new DataContext(connectionString))
{
// Add load options
// execute a query
// I want information about the number of actual sql queries that ran using this context.
// Adding "1 to many" loadoptions or complex queries can create multiple sub-queries and that's why I want this info.
}
在 LINQ to SQL 中,您可以选择将生成的 SQL 记录到 TextWriter
。例如,您可以登录到控制台:
ctx.Log = Console.Out;
这不会为您提供查询计数,但会为您提供实际执行的 SQL,这可能会让您更好地了解正在发生的事情。
如果您想提供 select 条语句的聚合视图,您可以记录到 StringWriter
,然后使用正则表达式计算单词 [= 的出现次数15=]:
var stringWriter = new StringWriter();
ctx.Log = stringWriter;
// Use DataContext referenced by ctx ...
var regex = new Regex(@"\bSELECT\b");
var selectCount = regex.Matches(stringWriter.ToString()).Count;
显然,您可能还需要数其他词,例如 INSERT
、UPDATE
和 DELETE
,如果您说 运行,您可能会 运行 计算问题 WHERE
包含单词 SELECT
.
的子句
您可以计算执行的 SQL 语句的数量,而不是尝试 "understand" 和 SQL 进行计数。每个语句以一行结尾,在我的测试中具有以下格式:
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.34209
您可以创建一个正则表达式来匹配这个字符串:
var regex = new Regex(@"^-- Context: ", RegexOptions.Multiline);
var statementCount = regex.Matches(stringWriter.ToString()).Count;
有什么方法可以检查 DataContext
运行 有多少数据库查询?
我知道我可以 运行 sql profiler
但我想分析一个包含数百个查询的大项目。
如果没有,是否有任何有用的事件可以注册并计算它们?
我正在寻找这样的东西:
using(DataContext ctx = new DataContext(connectionString))
{
// Add load options
// execute a query
// I want information about the number of actual sql queries that ran using this context.
// Adding "1 to many" loadoptions or complex queries can create multiple sub-queries and that's why I want this info.
}
在 LINQ to SQL 中,您可以选择将生成的 SQL 记录到 TextWriter
。例如,您可以登录到控制台:
ctx.Log = Console.Out;
这不会为您提供查询计数,但会为您提供实际执行的 SQL,这可能会让您更好地了解正在发生的事情。
如果您想提供 select 条语句的聚合视图,您可以记录到 StringWriter
,然后使用正则表达式计算单词 [= 的出现次数15=]:
var stringWriter = new StringWriter();
ctx.Log = stringWriter;
// Use DataContext referenced by ctx ...
var regex = new Regex(@"\bSELECT\b");
var selectCount = regex.Matches(stringWriter.ToString()).Count;
显然,您可能还需要数其他词,例如 INSERT
、UPDATE
和 DELETE
,如果您说 运行,您可能会 运行 计算问题 WHERE
包含单词 SELECT
.
您可以计算执行的 SQL 语句的数量,而不是尝试 "understand" 和 SQL 进行计数。每个语句以一行结尾,在我的测试中具有以下格式:
-- Context: SqlProvider(Sql2008) Model: AttributedMetaModel Build: 4.0.30319.34209
您可以创建一个正则表达式来匹配这个字符串:
var regex = new Regex(@"^-- Context: ", RegexOptions.Multiline);
var statementCount = regex.Matches(stringWriter.ToString()).Count;