gpt4 book ai didi

c# - SQL CPU 使用 SqlDataAdapter.Fill 命令达到峰值

转载 作者:搜寻专家 更新时间:2023-10-30 20:58:44 24 4
gpt4 key购买 nike

我注意到将 SQL 数据导入 C# 应用程序时出现了一些奇怪的行为。我使用了数据集 xsd 但这开始超时。然后我改变了我的方法,因为我已经有一个类可以为我尝试过的其他操作生成并返回一个数据表。这也超时了。

我在 SSMS 中打开了事件监视器,以了解代码运行时 SQL 中发生了什么,并注意到无论我以何种方式运行它,fill 命令都会导致 SQL Sever 达到 100% CPU 的峰值并保持在那里直到命令被取消。这是一台性能出色的服务器,配备强大的 240Ghz 处理器和 30GB 内存。该查询并不完全快速,但在 SSMS 中不到 3 秒就返回了 10 万行。

这是我的数据集代码:

        public DataTable UKDataRefresh ()
{
UKREFRESH.UKNewContactsDataTable dt =
new UKREFRESH.UKNewContactsDataTable();
UKREFRESHTableAdapters.UKNewContactsTableAdapter ta =
new UKREFRESHTableAdapters.UKNewContactsTableAdapter();

ta.Connection.ConnectionString += ";Password = xxxxxx;";

try
{
ta.Fill(dt, global::SilverPopTransfer.Properties.Settings.Default.UKDATELASTACTION);

}
catch (SqlException )
{

throw;
}

return dt;

}

这是我动态构建它的代码:

public DataTableOperations (string strconnection, string strSelect,string tablename)
{
SqlConnection c = new SqlConnection(strconnection);
connection = c;
SqlDataAdapter da = new SqlDataAdapter(strSelect, connection);
DataSet ds = new DataSet();
//added this to see what would happen.
da.SelectCommand.CommandTimeout = 0;
connection.Open();
da.Fill(ds, tablename);
connection.Close();
Datatable = ds.Tables[tablename];
_disposed = false;
}

我正在寻找可能导致问题的线索,而不是完整的解决方案。
顺便说一下,我在发布之前在一个预先存在的控制台应用程序中运行了一个类似的函数,它连接并运行没有错误:查询几乎是相同的。

唯一的区别是,对于预先存在的应用程序,我使用集成安全性,但在这种情况下,我指定了用户和密码。我确认登录凭据。

最佳答案

执行前检查索引并set nocount on。 SSMS 性能不是一个好的性能指标。它只获取部分数据并异步执行。尝试调用一小部分数据或运行查询而不填充表。这可能是瓶颈。

如果您正在运行带参数的选择,sql server 将使用 sp_execute 执行它,然后服务器编译它创建 CPE 峰值。

关于c# - SQL CPU 使用 SqlDataAdapter.Fill 命令达到峰值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12267749/

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