дозвуковой - загрузка коллекции против запроса - PullRequest
0 голосов
/ 16 июля 2009

Я устанавливаю источник данных для сетки данных в дозвуковом наборе

        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 ]

1 голос
/ 16 июля 2009

Пара мыслей ...

Если вам нужно использовать DataSet / DataTable, вы можете просто сделать это:

grid.DataSource = new Select (). From ("tcolor"). ExecuteDataSet ();

Обе вещи, которые вы показываете выше, используют одни и те же основные биты - не уверен, почему один медленнее, чем другой.

0 голосов
/ 29 июля 2009

TcolorCollection (). Load () создает 8000 объектов Tcolor и добавляет их в список. Исходя из моего опыта, не рекомендуется использовать коллекцию, если вы ожидаете более 1000 записей.

В этом случае, как предложил Роб, ExecuteDataSet () работает намного быстрее.

Или вы можете использовать ExecuteTypedList (), чтобы сопоставить запрос с вашим собственным классом poco и украсить его необходимыми функциями SubSonic.

, например

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

должно быть довольно близко по времени выполнения к собственному доступу к БД.

...