亚音速 - 集合负载与查询

时间:2009-07-15 20:28:35

标签: c# subsonic

我正在将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多条记录。不小,但也不大。

2 个答案:

答案 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();
   }
}

在执行本机数据库访问时应该非常接近。