Вы ищете «лучший подход к поиску строк в таблице данных», поэтому я сначала должен спросить: «лучший» для чего? Я думаю, что у любой техники есть сценарии, в которых она может подходить лучше, чем у других.
Во-первых, давайте посмотрим на DataView.RowFilter
: DataView имеет некоторые преимущества в привязке данных. Он очень ориентирован на просмотр, поэтому имеет мощные функции сортировки, фильтрации или поиска, но создает некоторые накладные расходы и не оптимизирован для производительности. Я бы выбрал DataView.RowFilter
для небольших наборов записей и / или где вы используете другие функции (например, прямую привязку данных к представлению).
Большинство фактов о DataView, которые вы можете прочитать в старых постах, по-прежнему применимы.
Во-вторых, вы должны предпочесть DataTable.Rows.Find
, чем DataTable.Select
, если вы хотите всего один удар. Зачем? DataTable.Rows.Find возвращает только одну строку. По сути, когда вы указываете первичный ключ, создается двоичное дерево. Это связано с некоторыми накладными расходами, но значительно ускоряет поиск.
DataTable.Select
медленнее, но может оказаться очень полезным, если у вас несколько критериев и вам нет дела до проиндексированных или неиндексированных строк: он может найти практически все, но не оптимизирован для производительности. По сути, DataTable.Select должен пройти всю таблицу и сравнить каждую запись с критериями, которые вы передали.
Надеюсь, этот небольшой обзор окажется полезным.
Я бы посоветовал взглянуть на эту статью , она была полезной для меня по вопросам производительности. Этот пост содержит некоторые цитаты из него.
Немного ОБНОВЛЕНИЯ:
Кстати, это может показаться немного за рамками вашего вопроса, но это почти всегда самое быстрое решение для фильтрации и поиска на серверной части. Если вы хотите простоты и имеете SQL Server в качестве бэкэнда и .NET3 + на клиенте, перейдите к LINQ-to-SQL. Поиск объектов Linq очень удобен и создает запросы, которые выполняются на стороне сервера. Хотя LINQ-to-Objects тоже очень удобная, но и более медленная техника. Если ты еще не знал ....