DataView Performa

Topik ini membahas manfaat performa menggunakan metode Find dan FindRows dari kelas DataView, dan menyimpan cache DataView dalam aplikasi Web.

Temukan dan FindRows

DataView membuat indeks. Indeks berisi kunci yang dibuat dari satu atau beberapa kolom dalam tabel atau tampilan. Kunci ini disimpan dalam struktur yang memungkinkan DataView untuk menemukan baris atau baris yang terkait dengan nilai kunci dengan cepat dan efisien. Operasi yang menggunakan indeks, seperti pemfilteran dan pengurutan, melihat peningkatan performa yang signifikan. Indeks untuk DataView dibangun baik saat DataView dibuat dan ketika salah satu informasi pengurutan atau pemfilteran dimodifikasi. Membuat DataView lalu menyetel informasi pengurutan atau pemfilteran kemudian menyebabkan indeks dibangun setidaknya dua kali: pertama ketika DataView dibuat, kemudian ketika salah satu properti pengurutan atau filter dimodifikasi. Untuk informasi selengkapnya tentang pemfilteran dan pengurutan dengan DataView, lihat Pemfilteran dengan DataView dan Pengurutan dengan DataView.

Jika Anda ingin menghasilkan hasil dari kueri tertentu pada data, dibandingkan dengan memberikan tampilan dinamis subkumpulan data, Anda dapat menggunakan metode Find atau FindRows dari DataView, daripada mengatur properti RowFilter. Properti RowFilter paling baik digunakan dalam aplikasi terikat data di mana kontrol terikat menampilkan hasil yang difilter. RowFilter Mengatur properti membangun kembali indeks untuk data, menambahkan overhead ke aplikasi Anda dan mengurangi performa. Metode Find dan FindRows menggunakan indeks saat ini tanpa mengharuskan indeks dibangun kembali. Jika Anda akan memanggil Find atau FindRows hanya sekali, maka Anda harus menggunakan yang ada DataView. Jika Anda akan memanggil Find atau FindRows beberapa kali, Anda harus membuat yang baru DataView untuk membangun kembali indeks pada kolom yang ingin Anda cari, lalu memanggil Find metode atau FindRows . Untuk informasi selengkapnya tentang Find metode dan FindRows , lihat Menemukan Baris.

Contoh berikut menggunakan Find metode untuk menemukan kontak dengan nama belakang "Zhu".

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.
var found = view.Find("Zhu");
Dim contacts As DataTable = dataSet.Tables("Contact")

Dim query = _
    From contact In contacts.AsEnumerable() _
    Order By contact.Field(Of String)("LastName") _
    Select contact

Dim view As DataView = query.AsDataView()

Dim found As Integer = view.Find("Zhu")

Contoh berikut menggunakan FindRows metode untuk menemukan semua produk berwarna merah.

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";

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

DataRowView[] foundRowsView = view.FindRows(criteria);
Dim products As DataTable = dataSet.Tables("Product")

Dim query = _
From product In products.AsEnumerable() _
Order By product.Field(Of Decimal)("ListPrice"), product.Field(Of String)("Color") _
Select product

Dim view As DataView = query.AsDataView()
view.Sort = "Color"

Dim criteria As Object() = New Object() {"Red"}

Dim foundRowsView As DataRowView() = view.FindRows(criteria)

ASP.NET

ASP.NET memiliki mekanisme cache yang memungkinkan Anda menyimpan objek yang memerlukan sumber daya server yang luas untuk dibuat dalam memori. Penggunaan cache untuk jenis sumber daya ini dapat secara signifikan meningkatkan performa aplikasi Anda. Penembolokan diimplementasikan oleh kelas Cache, dengan instans cache yang bersifat khusus untuk setiap aplikasi. Karena membuat objek baru DataView dapat memerlukan banyak sumber daya, Anda mungkin ingin menggunakan fungsi penyimpanan sementara ini di aplikasi Web sehingga DataView tidak harus dibuat ulang setiap kali halaman Web dimuat ulang.

Dalam contoh berikut, DataView di-cache sehingga data tidak harus diurutkan ulang saat halaman di-refresh.

If (Cache("ordersView") = Nothing) Then

Dim dataSet As New DataSet()

   FillDataSet(dataSet)

   Dim orders As DataTable = dataSet.Tables("SalesOrderHeader")

   Dim query = _
                    From order In orders.AsEnumerable() _
                    Where order.Field(Of Boolean)("OnlineOrderFlag") = True _
                    Order By order.Field(Of Decimal)("TotalDue") _
                    Select order

   Dim view As DataView = query.AsDataView()

   Cache.Insert("ordersView", view)

End If

Dim ordersView = CType(Cache("ordersView"), DataView)

GridView1.DataSource = ordersView
GridView1.DataBind()
if (Cache["ordersView"] == null)
{
   // Fill the DataSet.
   DataSet dataSet = FillDataSet();

   DataTable orders = dataSet.Tables["SalesOrderHeader"];

   EnumerableRowCollection<DataRow> query =
                        from order in orders.AsEnumerable()
                        where order.Field<bool>("OnlineOrderFlag") == true
                        orderby order.Field<decimal>("TotalDue")
                        select order;

   DataView view = query.AsDataView();
   Cache.Insert("ordersView", view);
}

DataView ordersView = (DataView)Cache["ordersView"];

GridView1.DataSource = ordersView;
GridView1.DataBind();

Lihat juga