問題領域是我有一個db文件與〜90000行和6列。我得到了一個Select查詢,我得到了所有必需的行和列,並且工作正常。現在是我用這些記錄填充DataTable的東西。我用SQliteDataAdapter Fill Method做了這個,大約需要1,3秒,在這之後我用這些數據填充我的ObservableCollection(< - 綁定到DataGrid),這也需要約1,3秒。因此,這裏是我的代碼C#SQLiteDataAdapter填充方法很慢
private void GetSelectedMaterial()
{
DataTable dtMaterial = new DataTable();
materialColl.Clear(); // Clearing ObservableCollection
Trace.WriteLine("GetSelectedMaterial TS " + DateTime.Now + DateTime.Now.Millisecond);
using (SQLiteConnection connection = new SQLiteConnection(dbConnection))
using (SQLiteCommand cmd = connection.CreateCommand())
{
connection.Open();
query = "SELECT * FROM Tbl_Materialliste LEFT JOIN(SELECT * FROM Tbl_Besitzt k WHERE k.TechnikID = '" + teTechnikID + "') as k ON k.MaterialID = Tbl_Materialliste.MaterialID";
dataAdapter = new SQLiteDataAdapter(query, connection);
Trace.WriteLine("query: " + DateTime.Now + DateTime.Now.Millisecond);
dtMaterial.Columns.Add("Checked", typeof(bool));
Trace.WriteLine("here comes the fill: " + DateTime.Now + DateTime.Now.Millisecond);
dataAdapter.Fill(dtMaterial);
Trace.WriteLine("Checkbox: " + DateTime.Now + DateTime.Now.Millisecond);
DetermineCheckBox(dtMaterial, teTechnikID, 8);
Trace.WriteLine("SQL TS: " + DateTime.Now + DateTime.Now.Millisecond);
}
FillMaterialColl(dtMaterial);
}
private void FillMaterialColl(DataTable dtMaterial)
{
foreach (DataRow dr in dtMaterial.Rows)
{
Material mat = new Material();
mat.isChecked = (bool)dr.ItemArray[0];
mat.materialID = (string)dr.ItemArray[1];
mat.materialkurztext = (string)dr.ItemArray[2];
mat.herstellername = (string)dr.ItemArray[3];
mat.herArtikenummer = (string)dr.ItemArray[4];
mat.dokument = (string)dr.ItemArray[5];
mat.substMaterial = (string)dr.ItemArray[6];
materialColl.Add(mat);
}
}
我知道ObservableCollections是排水性能,但有一些方法以另一種方式來做到這一點?有人說使用DataReader而不是DataAdapter,但DataAdapter應該使用DataReader,所以我認爲在性能上沒有改進。所以,主要的問題是,這一進程需要長期,如果展示新材料大約需要3-4秒的用戶體驗不太好..
這是Tbl_Material和Tbl_Technik之間的多對多關係 而我的Select查詢給了我所有來自Tbl_Material的entrys(〜90k)以及另外那些來自Tbl_Besitzt的列,我可以在其中找到技術ID 以便我可以過濾(用於一個複選框)哪些entrys屬於我的MaterialID 在我的數據庫文件MaterialId從Tbl_Materiallis TE是一個PK,也從Tbl_Technik TechnikID - 不是你在設計圖像納悶,我沒有得到他們到模型..
非常感謝!
是的這就是正確的,但如果我這樣做不化背景線程它並沒有改變......我會編輯我的代碼,使螺紋心不是必要的......任何其他幫助的想法? – user8574993