问题领域是我有一个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