编辑:
我的问题不再是问题了:我重做了我的性能测试,我犯了一个致命的愚蠢错误:我忘记了 x1000 从毫秒中获取秒数:/ 对不起那些家伙。
有关信息:
- 我每秒从我的 PC 到本地网络上的数据库服务器进行大约 1900 次更新。
- 如果程序与 DB 在同一台机器上,则每秒更新 3.200 次。
- 每秒 3.500 次从我的 PC 上的数据库服务器更新我不重新创建和重新打开新的 SQLConnection。
- 每秒 5.800 次更新,带有批处理文本。对于我的 10.000 行,如果需要 5 秒,我的程序就可以了。很抱歉让您担心了。
实际上,我使用 SQL 存储过程在我的数据库中创建一行以避免 SQL 注入。在 C# 中,我有以下方法:
public void InsertUser(string userCode)
{
using (SqlConnection sqlConnection = new SqlConnection(this.connectionString))
{
SqlCommand sqlCommand = new SqlCommand("InsertUser", sqlConnection);
sqlCommand.CommandType = System.Data.CommandType.StoredProcedure;
sqlCommand.Parameters.Add(new SqlParameter("@UserCode", userCode));
sqlConnection.Open();
sqlCommand.ExecuteNonQuery();///0.2 seconds !ERROR HERE! 0.2ms here,NOT 0.2sec!!!
}
}
当我要插入一两行时,它会很棒。但如果我需要创建 1.000 个用户、10.000 个产品和 5000 个宠物,这不是最好的解决方案:我将在网络传输中浪费大量时间。
我相信,如果不检查它,我可以只使用有限数量的回调。所以我不想调用 10.000 次:
sqlCommand.BeginExecuteNonQuery()
另一种方法是创建批处理文本,但存在 SQL 注入风险(而且很丑陋)。
.Net 中是否有管理它的“SqlCommandList”对象?如何在数据库中进行大量写入?那有什么好的模式呢?