【发布时间】:2010-09-17 02:10:36
【问题描述】:
编辑:
我的问题不再是问题了:我已经重做我的性能测试并且我犯了一个致命的愚蠢错误:我忘记了 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”对象来管理它?如何在数据库中进行大量写入?那有什么好的模式?
【问题讨论】:
-
我建议使用“sqlCommand.Prepare();”参数类型应该至少可以提高第二次查询的执行时间。
标签: c# performance stored-procedures batch-file sqlcommand