我注意到一些奇怪的行爲獲取SQL數據到C#應用程序。我使用了一個數據集xsd,但是這開始超時。然後我改變了我的方法,因爲我已經有了一個類,它會生成並返回一個數據表,用於我嘗試過的其他操作。這也超時了。SQL CPU峯值與SqlDataAdapter.Fill命令
我已經打開SSMS中的活動監視器,以瞭解代碼運行時發生在SQL中的情況,並注意到我運行它的方式,填充命令使SQL Sever在100%CPU達到峯值並保持停留狀態直到命令被取消。這是一個很好的服務器,擁有大量的240Ghz處理器和30GB內存。該查詢不完全是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;
}
進出口尋找線索,有的可能引起問題的,不完整的解決方案。
順便提一下,我在發佈之前在預先存在的控制檯應用程序中運行了類似的功能,並且它連接並正常運行:查詢幾乎完全相同。
唯一的區別是,對於預先存在的應用程序,我使用集成安全性,但在這種情況下,我指定了用戶和密碼。我已確認登錄憑證。
謝謝我看了一下代碼並嘗試了你的建議:'SqlCommand cmnd = new SqlCommand(strSelect,connection); CommandBehavior behave = CommandBehavior.Default; connection.Open(); IAsyncResult result = cmnd.BeginExecuteReader(behave);使用(SqlDataReader reader = cmnd.EndExecuteReader(result)){DisplayResults(reader); }'這和以前有相同的結果。即CPU中的大量尖峯和**很多進程觸發。 –
也許你在使用參數嗎?檢查我的編輯。 –