Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Разработка приложений баз данных (Visual Studio 2008).docx
Скачиваний:
143
Добавлен:
26.03.2016
Размер:
1.01 Mб
Скачать

Производительность DataView

В этом разделе обсуждается повышение производительности при использования методов FindиFindRowsклассаDataView, а также при кэшировании объектаDataViewв веб-приложении.

Find и FindRows

Объект DataViewсоздает индекс. Индекс содержит ключи, построенные из одного или нескольких столбцов в таблице или представлении. Эти ключи хранятся в виде структуры сбалансированного дерева, которая поддерживает быстрый поиск строк по их ключевым значениям в объектеDataView. Производительность использующих этот индекс операторов, таких как операторы фильтрации и сортировки, значительно повышается. Индекс дляDataViewформируется как при созданииDataView, так и при изменении каких-либо сведений о сортировке или фильтрации. СозданиеDataViewи последующее задание сведений о сортировке или фильтрации приводит как минимум к двукратному построению индекса — при созданииDataViewи при изменении каких-либо свойств сортировки или фильтрации. Дополнительные сведения о фильтрации и сортировке с помощьюDataViewсм. в разделахФильтрация с помощью DataView (LINQ to DataSet) и Сортировка с помощью DataView (LINQ to DataSet).

Чтобы вернуть результаты определенного запроса к данным в противоположность динамическому представлению подмножества данным, можно воспользоваться методами FindилиFindRowsклассаDataViewвместо установки свойстваRowFilter. СвойствоRowFilterиспользуется наилучшим образом в приложении, связываемом с данными, где элемент связывания отображает отфильтрованные результаты. При установке свойстваRowFilterперестраивается индекс данных, что добавляет нагрузку на приложение и снижает производительность. МетодыFindиFindRowsиспользуют текущий индекс, не требуя его перестроения. Если Find или FindRows планируется вызвать только один раз, следует использовать существующий объект DataView. Если методы Find или FindRows планируется вызывать несколько раз, следует создать новый объект DataView для перестроения индекса столбца, в котором необходимо выполнить поиск, а затем вызвать методы Find или FindRows. Дополнительные сведения о методах Find и FindRows см. в разделе Поиск строк (ADO.NET).

В следующем примере метод Findиспользуется для поиска контактного лица с фамилией «Zhu».

C#

DataTable contacts = dataSet.Tables["Contact"];

EnumerableRowCollection<DataRow> query = from contact in contacts.AsEnumerable()

orderby contact.Field<string>("LastName")

select contact;

DataView view = query.AsDataView();

// Find a contact with the last name of Zhu.

int found = view.Find("Zhu");

В следующем примере метод FindRowsиспользуется для поиска всех продуктов красного цвета.

C#

DataTable products = dataSet.Tables["Product"];

EnumerableRowCollection<DataRow> query = from product in products.AsEnumerable()

orderby product.Field<Decimal>("ListPrice"), product.Field<string>("Color")

select product;

DataView view = query.AsDataView();

view.Sort = "Color";

object[] criteria = new object[] { "Red"};

DataRowView[] foundRowsView = view.FindRows(criteria);