我注意到将SQL数据导入c#应用程序的一些特殊行为。我使用了数据集xsd,但这开始超时。然后我改变了我的方法,因为我已经有了一个类,它会为我尝试的其他操作生成并返回一个数据表。这太快了。
我在SSMS中打开了Activity Monitor,以了解代码运行时SQL中发生了什么,并注意到我运行它的哪种方式fill命令使SQL Sever以100%CPU达到峰值并保持在那里直到命令被取消。这是一个很好的服务器,拥有大量的240Ghz处理器和30GB RAM。该查询并不完全是zippy,但在SSMS中在3秒内返回100k行。
以下是我的数据集代码:
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;
}
我正在寻找可能导致问题的线索,而不是完整的解决方案 顺便说一句,我在发布之前在预先存在的控制台应用程序中运行了类似的功能,并且连接并运行时没有错误:查询几乎相同。
唯一的区别是,对于预先存在的应用程序,我使用集成安全性,但在这种情况下,我指定用户和密码。我已确认登录凭据。
答案 0 :(得分:0)
执行前检查索引和set nocount on
。 SSMS性能不是一个好的性能指标。它只获得部分数据并执行异步。尝试调用一小部分数据或运行查询而不填写表格。它可能是瓶颈。
如果您正在运行带参数的select,sql server将使用sp_execute
执行它,然后服务器编译它以创建CPE峰值。