下面的 C# 代码检查 SQL 数据库以查看记录是否与 ClientID 和用户名匹配。如果找到超过 15 条或更多匹配的记录,则我的 Windows 2008 服务器上的 CPU 峰值约为 78%,而在执行以下 C# 代码时会找到 15 条记录。SQL Server 2008 数据库和软件位于另一台服务器上,因此问题不在于 SQL Server 使 CPU 达到峰值。问题在于我的 C# 软件正在执行下面的代码。在执行数据库查询并找到记录时,我可以看到包含以下 C# 代码的软件可执行文件飙升至 78%。
有人可以告诉我,当找到 15 个或更多匹配记录时,我的代码是否有问题导致 CPU 出现峰值?你能告诉我/告诉我如何优化我的代码吗?
更新:如果它找到 10 条记录,CPU 只会以 2-3% 的速度出现峰值。只有当它找到 15 条或更多记录时,CPU 才会以 78% 的速度飙升 2 到 3 秒。
//ClientID[0] will contain a ClientID of 10 characters
//output[0] will contain a User Name
char[] trimChars = { ' ' };
using (var connection = new SqlConnection(string.Format(GlobalClass.SQLConnectionString, "History")))
{
connection.Open();
using (var command = new SqlCommand())
{
command.CommandText = string.Format(@"SELECT Count(*) FROM Filelist WHERE [ToAccountName] = '" + output[0] + @"'");
command.Connection = connection;
var rows = (int) command.ExecuteScalar();
if (rows >= 0)
{
command.CommandText = string.Format(@"SELECT * FROM Filelist WHERE [ToAccountName] = '" + output[0] + @"'");
using (SqlDataReader reader = command.ExecuteReader())
{
if (reader.HasRows)
{
while (reader.Read())
{
//Make sure ClientID does NOT exist in the ClientID field
if (reader["ClientID"].ToString().TrimEnd(trimChars).IndexOf(ClientID[0]) !=
-1)
{
//If we are here, then do something
}
}
}
reader.Close();
reader.Dispose();
}
}
// Close the connection
if (connection != null)
{
connection.Close();
}
}
}