我有一个由Entity Framework支持的WCF RIA服务域服务,实体模型相当复杂。一般来说,大多数操作的性能都还可以。但是,我的Silverlight客户端包含一个主/细节视图。主视图是实体列表。在实体之间点击以选择它们会在服务器上触发方法,这平均需要5秒钟的时间 - 这是不可接受的。我使用Fiddler查看了通过网络进行的调用,发现所有时间都花费在了服务器上。
数据的返回量很小,只有大约6kb。我的问题在服务器端。虽然EF查询比较简单,但是我们有25个“Include”语句用于关联实体查询,其中包括4层嵌套(例如,“Include('1.2.3.4')”)。我认为瓶颈在于服务器上。并且,尽管生成的SQL很糟糕,但速度还是足够快的。执行SQL Profiler后发现数据返回量不算太大,只有3行左右,每行包含275列。我的问题在哪里?如何进行调试?如果在IQueryable GetEntity()方法的末尾设置断点,会发现在退出该方法后,在SQL Profiler中出现实际查询需要花费高达3秒钟的时间,这是怎么回事呢?请注意,我已经预先生成了我的Entity Framework视图,并且尝试使用编译查询来排除EF的“预热”时间,但没有任何改善。感谢您提供任何有关此问题的帮助。谢谢。
ServerGotRequest: 15:59:44.545
ServerBeginResponse:15:59:48.836
ServerDoneResponse: 15:59:48.836
ClientBeginResponse:15:59:48.836
ClientDoneResponse: 15:59:48.836
Overall Elapsed: 00:00:04.2940000
数据的返回量很小,只有大约6kb。我的问题在服务器端。虽然EF查询比较简单,但是我们有25个“Include”语句用于关联实体查询,其中包括4层嵌套(例如,“Include('1.2.3.4')”)。我认为瓶颈在于服务器上。并且,尽管生成的SQL很糟糕,但速度还是足够快的。执行SQL Profiler后发现数据返回量不算太大,只有3行左右,每行包含275列。我的问题在哪里?如何进行调试?如果在IQueryable GetEntity()方法的末尾设置断点,会发现在退出该方法后,在SQL Profiler中出现实际查询需要花费高达3秒钟的时间,这是怎么回事呢?请注意,我已经预先生成了我的Entity Framework视图,并且尝试使用编译查询来排除EF的“预热”时间,但没有任何改善。感谢您提供任何有关此问题的帮助。谢谢。