我正在帮助提高复杂应用程序的性能,其中包含遍布代码库的数百个实体框架查询。我们遇到的一个问题是,当我们运行SQL事件探查器并捕获实体框架查询时,找到实际导致通过分析器的sql语句的代码非常耗时。我想知道是否有某种方式我们可以"标记"每个实体框架语句都带有一个唯一的标识符,该标识符将在sql语句中出现。为实体框架为每个语句生成的实际sql语句添加注释的行。然后我们可以在探查器跟踪中看到注释,并在代码中搜索标记。关于我们如何做到这一点的任何想法?我猜测必须有一些方法可以拦截EF生成的sql并在它发送到数据库服务器之前添加我们的注释。
答案 0 :(得分:1)
我个人使用代码分析器而不是SQL分析器(我更喜欢JetBrain的dotTrace)。实体框架有时会根据它必须执行的操作生成多个查询,因此将您看到的每个查询标记为特定操作并不是一件容易的事情,因为它不一定会在每个查询中找到它。
根据我的经验,EF性能问题通常是由于在错误的位置执行linq查询的操作,该操作执行完整的表加载并保存大量对象。代码分析器还允许您精确地关注代码中的哪些地方来解决这些问题,而不是寻找创建有问题的SQL语句的操作。