Пишется приложение, в котором данные создаются динамически, хранятся в нескольких hashtable и таблички эти имеют реляционные связи. Ну просто база данных какая-то. Данных для отображения относительно много — 4 таблички по нескольку тысяч записей в каждой. Для поиска по ним и реализации фильтров для отображения пришлось написать свой наколенный SQL, но так как колонки в "таблицах" могут динамически добавляться, пришлось делать это через Reflection и искать по имени свойства — работает медленно, на наших объемах данных — по 5 секунд.
Может, кто-то подскажет выход? Может есть движки SQL для данных в памяти? Только не Linq — она еще бэта.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Здравствуйте, ic69, Вы писали:
I>Пишется приложение, в котором данные создаются динамически, хранятся в нескольких hashtable и таблички эти имеют реляционные связи. Ну просто база данных какая-то. Данных для отображения относительно много — 4 таблички по нескольку тысяч записей в каждой. Для поиска по ним и реализации фильтров для отображения пришлось написать свой наколенный SQL, но так как колонки в "таблицах" могут динамически добавляться, пришлось делать это через Reflection и искать по имени свойства — работает медленно, на наших объемах данных — по 5 секунд.
I>Может, кто-то подскажет выход? Может есть движки SQL для данных в памяти? Только не Linq — она еще бэта.
Попробуй DataSet, DataTable итд...

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Здравствуйте, Igor S Mandrigin, Вы писали:
ISM>Попробуй DataSet, DataTable итд...
Виноват, не до конца описал задачу. Делов том, что данные все время меняются — есть поток обновлений, который меняет значения полей объектов, хранящихся в hashtable. В этом и проблема — выполнив запрос, например — отбор по какому-то фильтру, нужно получить не статическую копию наборов полей объектов по состоянию на момент запроса, а ссылки на объекты, которые удовлетворяли запросу. После чего показать это в окошке, и данные должны там продолжать изменяться. То есть подход базы данных, когда результат SELECT есть новая таблица с копией записей, не подходит. А вот писать свою реализацию SELECT тоже кажется лишним — может, есть именно запросные движки над таблицей объектов?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Здравствуйте, ic69, Вы писали:
I>Здравствуйте, Igor S Mandrigin, Вы писали:
ISM>>Попробуй DataSet, DataTable итд...
I>Виноват, не до конца описал задачу. Делов том, что данные все время меняются — есть поток обновлений, который меняет значения полей объектов, хранящихся в hashtable. В этом и проблема — выполнив запрос, например — отбор по какому-то фильтру, нужно получить не статическую копию наборов полей объектов по состоянию на момент запроса, а ссылки на объекты, которые удовлетворяли запросу. После чего показать это в окошке, и данные должны там продолжать изменяться. То есть подход базы данных, когда результат SELECT есть новая таблица с копией записей, не подходит. А вот писать свою реализацию SELECT тоже кажется лишним — может, есть именно запросные движки над таблицей объектов?
Прямо в DataSet-е данные меняйте. Вам же ответили...
А запросы и отображение на форме в отдельный поток вынесите.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
С>Прямо в DataSet-е данные меняйте. Вам же ответили...
С>А запросы и отображение на форме в отдельный поток вынесите.
Спасибо, это мой старое восприятие SQL помешало.
Посмотрел внимательнее — действительно, DataTable.Select(...), например, возвращает DataRow[] как ссылки на те же элементы таблицы, так что все работает ровно как хочется. И, насколько я понял, можно просто использовать DataView для отображения в DataGrid.
Короче, разобрался, спасибо. Осталось потестировать скорость.
... << RSDN@Home 1.2.0 alpha rev. 0>>