gpt4 book ai didi

c# - 将其作为循环运行时,我应该将 Open() 和 Close() 放在循环外还是循环内?

转载 作者:行者123 更新时间:2023-11-30 19:55:45 25 4
gpt4 key购买 nike

我有一段代码

        await this._Conn.OpenAsync();
using (SqlCommand cmd = new SqlCommand("AddOrUpdateAnswer", this._Conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@AnswerVal", Answer.AnswerVal);
cmd.Parameters.AddWithValue("@QuestionId", Answer.QuestionId);
cmd.Parameters.AddWithValue("@PartnerId", Answer.PartnerId);
await cmd.ExecuteNonQueryAsync();
}
this._Conn.Close();

目前不在循环内,但现在我想在循环内运行。我的问题是我是否应该这样写

        for ( var Answer in Answers )
{
await this._Conn.OpenAsync();
using (SqlCommand cmd = new SqlCommand("AddOrUpdateAnswer", this._Conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@AnswerVal", Answer.AnswerVal);
cmd.Parameters.AddWithValue("@QuestionId", Answer.QuestionId);
cmd.Parameters.AddWithValue("@PartnerId", Answer.PartnerId);
await cmd.ExecuteNonQueryAsync();
}
this._Conn.Close();
}

或者我可以像

这样在整个循环中打开它吗
            await this._Conn.OpenAsync();
for ( var Answer in Answers )
{
using (SqlCommand cmd = new SqlCommand("AddOrUpdateAnswer", this._Conn))
{
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@AnswerVal", Answer.AnswerVal);
cmd.Parameters.AddWithValue("@QuestionId", Answer.QuestionId);
cmd.Parameters.AddWithValue("@PartnerId", Answer.PartnerId);
await cmd.ExecuteNonQueryAsync();
}
}
this._Conn.Close();

为什么或为什么不?

最佳答案

虽然连接池确实显着降低了开销,但打开新连接会产生一定程度的开销。

通常最好在循环之前打开一次连接。

如果抛出异常,您当前的代码将永远不会关闭连接。你应该使用 using statement打开连接而不是明确关闭它时。让 IDisposable pattern 会为你解决这个问题。

关于c# - 将其作为循环运行时,我应该将 Open() 和 Close() 放在循环外还是循环内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35948121/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com