C# 确定要建立多个数据上下文吗?
给定以下代码:C# 确定要建立多个数据上下文吗?,c#,sql-server,performance,datacontext,C#,Sql Server,Performance,Datacontext,给定以下代码: public static void SomeLoop() { using(var db = new ArcadeContext()) { var changeRecs = db.ArcadeGameRanks.Where(c => c.Date == today); foreach (var rankRecord in changeRecs) { var rank = SomeMeth
public static void SomeLoop()
{
using(var db = new ArcadeContext())
{
var changeRecs = db.ArcadeGameRanks.Where(c => c.Date == today);
foreach (var rankRecord in changeRecs)
{
var rank = SomeMethod(rankRecord.GameID);
UpdateGamesCatRank(rankRecord.GameID, rank);
}
}
}
public static void UpdateGamesCatRank(int gameID, int catRank)
{
using(var db = new ArcadeContext())
{
db.ExecuteCommand("UPDATE ArcadeGame SET CategoryRank = " + catRank + " WHERE ID = " + gameID);
}
}
运行SQL Server Profiler时,我会收到大量重复的审核登录
和审核注销
消息,这些消息似乎会影响性能:
我自学C#,所以我知道我很有可能在做一些不典型的事情
我的问题是,上述设计模式被认为是好的吗?或者我应该将数据上下文作为参数重新使用/传递给函数,以便在每次调用函数时不需要重新建立它们?(如果我认为重复创建新数据上下文是导致登录和注销的原因)。由于您的上下文已经实例化,请将其传递给您的方法
public static void SomeLoop()
{
using(var db = new ArcadeContext())
{
var changeRecs = db.ArcadeGameRanks.Where(c => c.Date == today);
foreach (var rankRecord in changeRecs)
{
var rank = SomeMethod(rankRecord.GameID);
UpdateGamesCatRank(rankRecord.GameID, rank, db);
}
}
}
public static void UpdateGamesCatRank(int gameID, int catRank, ArcadeContext db)
{
db.ExecuteCommand("UPDATE ArcadeGame SET CategoryRank = " + catRank + " WHERE ID = " + gameID);
}
这将在完成foreach循环时通过处理上下文来执行查询、返回和解析。这不是一个好主意。这可能只是一个示例来说明您的观点,但我认为不需要一个全新的方法来执行sql命令。把这个命令放到你的循环中。为每个调用实例化一个新的db上下文会降低您的性能。@SLaks您能在回答中详细说明一下吗?