0
我已经使用一些实体框架廓线仪,如蚂蚁和一些其他类似的替代品开始。在分析器分析之后,它列出了由Entity Framework生成的SQL查询格式中的所有实体框架瓶颈。但我无法跟踪代码中的哪个查询。是否有可能知道哪一行代码运行该SQL查询?找出哪些代码运行实体框架的SQL代码
我已经使用一些实体框架廓线仪,如蚂蚁和一些其他类似的替代品开始。在分析器分析之后,它列出了由Entity Framework生成的SQL查询格式中的所有实体框架瓶颈。但我无法跟踪代码中的哪个查询。是否有可能知道哪一行代码运行该SQL查询?找出哪些代码运行实体框架的SQL代码
我不认为你可以让蚂蚁做到这一点(只有展鹏可以)。
但是在进行性能分析时,您可以通过将日志Action
附加到上下文的Database.Log属性来始终记录所有SQL语句。
在此记录操作时,您还可以登录堆栈跟踪在那一刻,然后试图找到报道的SQL瓶颈的调试日志记录:
using (var db = new MyContext())
{
db.Database.Log = s =>
{
Debug.WriteLine(s);
if (s.StartsWith("SELECT"))
Debug.WriteLine("\nStack trace:\n" +
string.Join("", new StackTrace(3).GetFrames().ToList()));
};
// LINQ statements here.
}
一些评论
new StackTrace(3)
跳过覆盖记录过程本身的前几帧。在堆栈跟踪的某处,您会发现触发记录的SQL语句的C#方法。SELECT
命令的堆栈跟踪。通常,那些是你想分析的。从上下文工厂获取您的上下文实例是一个好主意,因此您只能编写一次此记录代码。您可能需要通过if DEBUG
编译器指令有条件地添加日志记录操作。
您可以登录所有的LINQ(SQL生成)查询您的code..by在文件中记录它们 –