[英]Stored procedure with multiple result sets very slow
我將EF6與ObjectContext + edmx模型一起使用。 有一個具有多個結果集的存儲過程。 事實證明,每次調用.GetNextResult時,它都會動態編譯新方法,從而產生巨大的開銷和性能損失。 我使用Perfview和JIT編譯統計數據來弄清楚這一點。
using (var db = new SomeEntities())
{
var resultSet1 = db.GetAllData();
// handle result set 1 data
// This causes new dynamically emitted method to be JIT-compiled.
var resultSet2 = resultSet1.GetNextResult<Class2>();
}
是否有消除動態編譯並仍然使用.GetNextResult的方法? 到目前為止,我必須還原到舊的ADO.net數據閱讀器,如MSDN中所示
我發現解決方案比.GetNextResult更快,並且與ADO.Net DataReader相比,“手動”解決方案更少。 這是.Translate方法。 有MSDN文章描述了如何使用它。 基本上
var cmd = db.Database.Connection.CreateCommand();
cmd.CommandText = "[dbo].[GetAllBlogsAndPosts]";
db.Database.Connection.Open();
var reader = cmd.ExecuteReader();
// Read first result set
var blogs = ((IObjectContextAdapter)db).ObjectContext.Translate<EFStoredProcJit.Blog>(reader, "Blogs", MergeOption.AppendOnly);
// Read 2nd result set
reader.NextResult();
var posts = ((IObjectContextAdapter)db).ObjectContext.Translate<EFStoredProcJit.Post>(reader, "Posts", MergeOption.AppendOnly);
我寫了博客文章,其中包含有關此示例應用程序的更多詳細信息。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.