1. Pilihan SqlDataRead dan Dataset Kelebihan Sqldataread : Membaca data sangat cepat. Jika data yang dikembalikan tidak memerlukan banyak pemrosesan, disarankan untuk menggunakan SqlDataReader, yang kinerjanya jauh lebih baik daripada dataset. Kekurangan: Koneksi ke database tidak dapat ditutup sampai data dibaca
(SqlDataReader membaca data dalam arah maju cepat. Kelas SqlDataReader menyediakan cara untuk membaca aliran data hanya-maju yang diambil dari database SQL Server. Kelas ini menggunakan SQL Server Format transmisi data jaringan asli membaca data langsung dari koneksi database. DataReader harus ditutup secara eksplisit pada waktunya untuk melepaskan koneksi data tepat waktu.)
Kumpulan data membaca data dan menyimpannya dalam memori. Kekurangan: Penggunaan memori yang tinggi. Jika Anda perlu melakukan banyak pemrosesan pada data yang dikembalikan, lebih baik menggunakan Dataset untuk mengurangi operasi koneksi ke database. Keuntungan: Anda hanya perlu terhubung satu kali untuk menutup koneksi ke database
. Secara umum, jika Anda ingin membaca data dalam jumlah besar dan tidak melakukan banyak pemrosesan pada data yang dikembalikan, gunakan SqlDataReader memproses data yang dikembalikan, lebih tepat menggunakan datset. Pilihan SqlDataReader dan Dataset bergantung pada realisasi fungsi program.
2. ExecuteNonQuery dan ExecuteScalar
tidak perlu mengembalikan kumpulan hasil saat memperbarui data. Karena tidak ada kumpulan hasil yang dikembalikan, transmisi data jaringan dapat dihilangkan. Ini hanya mengembalikan jumlah baris yang terpengaruh. Jika Anda hanya perlu memperbarui data, overhead kinerja ExecuteNonQuery relatif kecil.
ExecuteScalar hanya mengembalikan kolom pertama dari baris pertama dalam kumpulan hasil. Gunakan metode ExecuteScalar untuk mengambil satu nilai (seperti nomor id) dari database. Operasi ini memerlukan lebih sedikit kode dibandingkan menggunakan metode ExecuteReader untuk melakukan operasi yang diperlukan untuk menghasilkan nilai tunggal pada data yang dikembalikan.
*Cukup perbarui data menggunakan ExecuteNonQuery. Query dengan nilai tunggal menggunakan opsi pengikatan data ExecuteScalar
3. Pengikatan data
Metode pengikatan umum DataBinder <%# DataBinder.Eval(Container.DataItem, "nama bidang") %> gunakan DataBinder.eval Pengikatannya tidak peduli dengan sumber data (Dataread atau dataset). Anda tidak perlu khawatir tentang tipe datanya. eval akan mengubah objek data ini menjadi string. Banyak pekerjaan yang dilakukan pada pengikatan yang mendasarinya, menggunakan kemampuan refleksi. Hanya karena nyaman digunakan, hal ini memengaruhi kinerja data. Mari kita lihat <%# DataBinder.Eval(Container.DataItem, "nama bidang") %>. Saat terikat ke kumpulan data, DataItem sebenarnya adalah DataRowView (jika terikat ke pembaca data (dataread), itu adalah IdataRecord.) Oleh karena itu, mengonversikannya secara langsung ke DataRowView akan sangat meningkatkan kinerja.
<%# ctype(Container.DataItem,DataRowView).Row("field name") %>
*Direkomendasikan untuk menggunakan <%# ctype(Container.DataItem,DataRowView).Row("field name") %> untuk data mengikat. Ketika jumlah datanya besar, kecepatannya bisa ditingkatkan ratusan kali lipat. Perhatikan dua aspek saat menggunakannya: 1. Anda perlu menambahkan <%@ Import namespace="System.Data"%> ke halaman. 2. Perhatikan huruf besar/kecil nama bidang (beri perhatian khusus). Jika tidak konsisten dengan kueri, dalam beberapa kasus akan lebih lambat dari <%# DataBinder.Eval(Container.DataItem, "field name") %>. Jika Anda ingin lebih meningkatkan kecepatan, Anda dapat menggunakan metode <%# ctype(Container.DataItem,DataRowView).Row(0) %>. Namun, keterbacaannya tidak tinggi.
Di atas adalah cara penulisan vb.net. Di c#: <@% ((DataRowView)Container.DataItem)["nama bidang"] %>
Cara paling sederhana untuk melihat status setiap proses eksekusi di halaman: Anda dapat melihat detailnya jika atribut jejak halaman tersebut adalah BENAR.
1. Gunakan prosedur tersimpan:
1. Kinerja: Prosedur tersimpan menyediakan banyak fitur lanjutan yang tidak ditemukan dalam bahasa SQL standar. Kemampuannya untuk meneruskan parameter dan mengeksekusi ekspresi logis membantu perancang aplikasi menangani tugas-tugas kompleks. Selain itu, prosedur tersimpan disimpan di server lokal, sehingga mengurangi bandwidth transmisi jaringan dan waktu eksekusi yang diperlukan untuk menjalankan prosedur. (Prosedur tersimpan telah mengkompilasi pernyataan sql, sehingga kecepatan eksekusinya jauh lebih cepat daripada mengeksekusi pernyataan sql dalam program)
2. Struktur program: Dari perspektif skalabilitas program, penggunaan prosedur tersimpan akan mempengaruhi modifikasi program di masa mendatang untuk kenyamanan. Misalnya, jika struktur database berubah, Anda hanya perlu mengubah struktur penyimpanan yang sesuai dan bagian pemanggilan program. Bagian ini tidak termasuk dalam cakupan artikel ini dan termasuk dalam desain struktur program. Jadi saya tidak akan memperluasnya di sini.
3. Keamanan program: Serangan SQL Injection dapat dihindari dengan menggunakan prosedur tersimpan.
2. Optimasi pernyataan query (untuk sql server2000)
Banyak orang menulis pernyataan sql hanya untuk tujuan tersebut, tanpa mempertimbangkan efisiensi eksekusi pernyataan sql. Di sini saya hanya menyediakan metode untuk mengoptimalkan urutan tabel. (Optimasi dan prinsip-prinsip pernyataan SQL akan dibahas dalam catatan studi SQL Server2000 saya.)
Untuk efisiensi eksekusi pernyataan SQL, Anda dapat menggunakan penganalisis kueri SQL Server2000 untuk melihat proses eksekusi pernyataan.
Optimalkan urutan tabel: Dalam keadaan normal, sqlserver akan secara otomatis mengoptimalkan koneksi tabel. Misalnya: pilih nama,no dari A gabung B di A. id=B.id gabung C di C.id=A.id di mana nama='wang'Meskipun
tabel A dicantumkan terlebih dahulu di Dari, lalu B, dan terakhir Itu C. Tapi sql server mungkin menggunakan tabel c terlebih dahulu. Prinsip pemilihannya adalah membatasi kueri pada satu atau beberapa baris, sehingga jumlah total data yang dicari di tabel lain dapat dikurangi. Dalam kebanyakan kasus, SQL Server akan membuat pilihan optimal, tetapi jika Anda menemukan bahwa kueri gabungan yang kompleks lebih lambat dari yang diharapkan, Anda bisa menggunakan pernyataan SET FORCEPLAN untuk memaksa SQL Server menggunakan tabel sesuai urutan kemunculannya. Seperti pada contoh di atas, tambahkan: SET FORCEPLAN ON.......SET FORCEPLAN OFF. Urutan eksekusi tabel akan dieksekusi sesuai urutan yang Anda tulis. Lihat 2 efisiensi eksekusi di Query Analyzer untuk memilih urutan penggabungan tabel.
*Gunakan SET FORCEPLAN untuk memilih urutan koneksi tabel
. 3. Optimasi halaman (.aspx)
terutama berfokus pada beberapa atribut halaman
1. EnableViewState (keadaan tampilan halaman). Setel ke false jika tidak ada persyaratan khusus. Dengan ViewState, setiap objek harus terlebih dahulu diserialkan ke dalam ViewState dan kemudian dideserialisasi melalui postback, sehingga tidak ada biaya untuk menggunakan ViewState. Gunakan objek sesedikit mungkin dan, jika memungkinkan, kurangi jumlah objek yang Anda masukkan ke dalam ViewState. Status tampilan pada dasarnya dapat dinonaktifkan dalam situasi berikut:
(1) Kontrol halaman (.ascx)
(2) Halaman tersebut tidak dikembalikan ke halamannya sendiri.
(3) Tidak diperlukan pemrosesan peristiwa untuk pengendalian.
(4) Kontrol tidak memiliki nilai properti dinamis atau terikat data (atau ditangani dalam kode untuk setiap postpack)
Nonaktifkan ViewState untuk satu halaman atau untuk setiap halaman, sebagai berikut: Satu halaman: <%@ Page EnableViewState=" Salah" %> Setiap halaman: Di web.config <Pages EnableViewState="false" /> EnableSessionState dapat mempertahankan nilai default (hanya akan menggunakan sumber daya jika halaman menggunakan status sesi). EnableViewStateMac Jika tidak ada persyaratan keamanan khusus, pertahankan nilai default.
2. Tata letak halaman. Disarankan untuk menggunakan Flowlayout (elemen ditambahkan tanpa atribut pemosisian absolut). Gridlayout (atribut pemosisian absolut) akan menghasilkan lebih banyak kode daripada Flowlayout karena penggunaan pemosisian absolut, terutama informasi pemosisian kontrol.
3. Saat merilis proyek, ingatlah untuk melepaskan status Debug halaman tersebut.
4. Optimasi bahasa HTML. Saran saya adalah mahir dalam Html/JavaScript dan menggunakan lebih sedikit kode yang dihasilkan secara otomatis oleh vs.net2003. Ini secara otomatis akan menghasilkan beberapa kode html yang tidak berguna.
5. Menyetel navigasi cerdas ke true dapat meningkatkan kinerja pengguna secara signifikan. Mengaktifkan properti ini berdampak kecil pada klien dan server. Ini dapat secara cerdas memperbarui bagian-bagian yang perlu diperbarui.
4. Pemilihan kontrol:
Pilihan kontrol Html dan kontrol server. Kenyamanan dan realisasi fungsional yang dibawa oleh kontrol server tidak tertandingi oleh kontrol HTML. Tapi itu diperoleh dengan mengorbankan sumber daya sisi server. Saran pribadi saya: Jika kontrol html tidak dapat mencapai fungsi yang ingin dicapai, dan tidak dapat dicapai bila dikombinasikan dengan beberapa bahasa skrip (seperti javascrpt/vbscript). Hanya dengan demikian kontrol server akan dipilih. Setelah memilih kontrol server, cobalah untuk mengoptimalkan kontrolnya, seperti membatalkan beberapa status halaman, dll. (lihat optimasi kontrol secara khusus).
Pemilihan kontrol server: Terutama menjelaskan beberapa kontrol data umum:
DataGrid: hadir dengan yang paling kuat tampilan data Kontrol ini memiliki banyak fungsi praktis bawaan seperti memodifikasi, menghapus, menambah, dan membuat halaman data. Jika Anda hanya perlu menampilkan data, cobalah untuk tidak memilih DataGrid (ini menyimpan semua data dalam kondisi tampilan). Juga jangan gunakan fungsi paging bawaan Microsoft telah melakukan banyak pekerjaan pada lapisan bawah paging otomatis nyaman digunakan, overhead kinerjanya sangat besar.
DataList: Fungsinya jauh lebih sedikit dibandingkan DataGrid. Tapi ini jauh lebih bisa disesuaikan. Tampilan data multi-baris yang unik memberi kita banyak kemudahan. Ini pada dasarnya dapat mengimplementasikan fungsi-fungsi yang dapat dicapai oleh DataGrid. Jadi disarankan untuk menggunakannya.
Repeater: Paling tidak berfungsi, tetapi sangat dapat disesuaikan. Disarankan untuk menggunakannya jika Anda hanya perlu menampilkan data. Karena pengurangan banyak fungsi, konsumsi kinerja server menjadi minimal. Oleh karena itu, jika untuk menampilkan data, saya pada dasarnya memilih Repeater, lalu DataList dan terakhir DataGrid
* coba pilih kontrol html. Fungsi-fungsi yang dapat diimplementasikan pada klien diimplementasikan pada klien (mahir dalam javascript), sehingga mengurangi tekanan pada server. Urutan pemilihan kontrol data: Repeater, DataList, DataGrid
5. Optimalisasi kontrol server:
1.
Kondisi tampilan kontrol kondisi tampilan pada dasarnya sama dengan kondisi tampilan halaman. Digunakan untuk menyimpan beberapa status kendali. Prinsip pemrosesannya sama dengan pemrosesan kondisi tampilan halaman. Jika tertarik, Anda bisa menggunakan Datagrid untuk mengikat data guna menguji jumlah data yang disimpan berdasarkan kondisi tampilan. Data yang disimpannya pada dasarnya sama dengan jumlah data yang ditampilkan oleh Datagrid.
2. Ispostpack
defaultnya adalah false. Ini harus disetel ke true ketika suatu peristiwa perlu dibuat.
Optimalisasi kontrol terutama bergantung pada pemahaman Anda dengan kontrol ini. Semakin baik Anda memahami cara kerja suatu kontrol, semakin baik Anda dapat mengoptimalkannya dengan tepat.
Optimalisasi kinerja tidak dapat dijelaskan dalam beberapa kalimat. Apa yang saya tulis hanyalah puncak gunung es. Optimalisasi kinerja bergantung pada akumulasi pengalaman sehari-hari dan pemahaman berkelanjutan tentang prinsip pengoperasian program.
6. Masalah pengecualian
Tidak perlu menggunakan pengecualian untuk masalah umum, seperti masalah ketika pengguna tidak ada di forum, kata sandi pengguna salah, dll, karena membuat instance pengecualian memerlukan banyak sumber daya dan memerlukan pengisian informasi pengecualian (tipe pengecualian, lokasi pengecualian tempat pengecualian dilempar) dll.), tentu saja bukan untuk menghindari penggunaan pengecualian, tetapi untuk menangani pengecualian yang diperlukan. Prinsip pengecualian adalah: jangan gunakan jika Anda bisa, dan jangan membuat pengecualian Anda sendiri jika Anda dapat menggunakan pengecualian yang ada di sistem.