我正在将datagridview的数据源设置为亚音速集合
TcolorCollection tc = new TcolorCollection().Load();
dataGridView1.DataSource = tc;
并且我注意到之前的代码比以下
更慢(远远多于) SubSonic.Query q3 = new SubSonic.Query("tcolor");
q3.QueryType = SubSonic.QueryType.Select;
IDataReader reader = q3.ExecuteReader();
DataTable dt = new DataTable();
dt.Load(reader);
dataGridView1.DataSource = dt;
我想使用集合类及其连接,但我需要一种方法让.Load()更快。
我正在使用的表有8000多条记录。不小,但也不大。
答案 0 :(得分:1)
一些想法......
如果你必须使用DataSet / DataTable,你可以这样做:
grid.DataSource = new Select()。From(“tcolor”)。ExecuteDataSet();
上面显示的两个内容都使用相同的核心位 - 不确定为什么一个比另一个慢。
答案 1 :(得分:0)
TcolorCollection()。Load()创建8000个Tcolor对象并将它们添加到列表中。 根据我的经验,如果您期望超过1000条记录,那么使用集合并不是一个好主意。
在这种情况下,正如Rob建议的那样,ExecuteDataSet()更快。
或者您可以使用ExecuteTypedList()将查询映射到您自己的poco类,并使用您需要的SubSonic功能进行装饰。
e.g。
public class TestPoco()
{
public int Id {get;set;}
public String Name {get;set;}
public bool IsNew { get { return Id == 0 } };
public void Delete()
{
// Test is an SubSonic IActiveRecord Object
Test.Destroy(Id);
}
}
private void MyTask()
{
List<TestPoco> list =
DB.Select("Id", "Name").From<Test>().ExecuteTypedList<TestPoco>();
foreach (var item in list)
{
if (item.Name.Contains("acme"))
item.Delete();
}
}
在执行本机数据库访问时应该非常接近。