Kemarin saya memposting artikel tentang cara memaksimalkan kinerja .NET. Banyak yang berkomentar. Terima kasih banyak atas komentarnya. Beberapa di antaranya menunjukkan beberapa kesalahan dalam artikel tersebut telah mendapatkan banyak manfaat.
Artikel kemarin terutama berfokus pada peningkatan kecepatan dari beberapa detail penulisan kode. Mungkin sulit untuk benar-benar merasakan peningkatan kinerja, tetapi sebagai seorang programmer, terus-menerus meningkatkan kualitas kode Anda adalah tujuan yang terus Anda kejar.
Faktanya, dengan berkembangnya perangkat keras, kecepatan perangkat keras kini jauh memenuhi kebutuhan kebanyakan orang bahkan berpendapat bahwa algoritma menjadi semakin tidak efektif dalam pengembangan perangkat lunak saat ini. Saya ingat menonton video struktur data dari MIT sebelumnya, dan profesor yang mengajar kuliah tersebut mengajukan pertanyaan (saya tidak ingat dengan jelas, tapi inilah yang dia maksud): Karena algoritma tidak lagi penting, mengapa kita masih di sini? Bagaimana dengan penelitian? Jawaban yang dia berikan adalah “SPEED”. Kita mengejar kecepatan seperti halnya pembalap mengejar kecepatan!
Dalam pengembangan banyak sistem saat ini, kecepatan bukanlah prioritas utama. Hal lain seperti stabilitas, keamanan, kegunaan kembali, dll sering kali menjadi prioritas utama. Saat ini, pola desain, arsitektur pengembangan, dll. tidak dirancang terutama untuk memecahkan masalah kinerja. Hal di atas dipertimbangkan oleh para analis dan arsitek. Pemrogram kecil seperti kita hanya dapat mengoptimalkan program di beberapa tempat kecil dalam kode, kelas, metode, dan baris kode. Menurut saya, ada baiknya untuk lebih memperhatikan detail.
Oke, cukup omong kosong, mari kita bahas topik hari ini. Overhead kinerja banyak sistem jaringan yang dikembangkan saat ini terutama pada pembacaan dan transmisi data. Kecepatan membaca yang lebih cepat dan penggunaan bandwidth jaringan yang lebih sedikit adalah tujuan yang kami kejar. Saya akan berbicara tentang cara meningkatkan kinerja .net dari aspek ini.
1. Halaman data di lapisan data. Ini dapat diimplementasikan melalui ExcuteReader atau prosedur tersimpan. Ada banyak metode, jadi saya tidak akan menjelaskan secara detail. (Anda dapat membaca apa yang saya tulis)
2. Coba gunakan ExcuteReader untuk membaca data PetShop 4.0, semua data dapat diakses. Semuanya diimplementasikan menggunakan ExcuteReader, kecuali Anda memiliki persyaratan khusus untuk non-koneksi (seperti SmartClient, dll.).
3. Dalam situasi tidak terhubung, menggunakan DataTable memiliki kinerja yang lebih baik daripada menggunakan DataSet, kecuali Anda ingin menyimpan beberapa tabel relasional.
4. Gunakan metode ImportRow dari DataTable.
Dalam beberapa kasus, perlu untuk menyalin sejumlah besar data dari satu DataTable ke yang lain. Menggunakan metode ImportRow dari DataTable dapat sangat meningkatkan kinerja ketika jumlah datanya kecil, ketika jumlah datanya tidak banyak mencapai lebih dari 10.000 baris, dapat ditingkatkan secara signifikan dan dapat mencapai beberapa kali lipat.
5. Serialisasi data ke dalam file biner untuk memudahkan transmisi.
Saat kita memproses objek DataSet dan DataTable, kita dapat membuat serialisasinya menjadi file XML. Jika ingin dikirimkan melalui jaringan, file XML akan menyebabkan masalah sumber daya seperti memori dan bandwidth jaringan. Saat ini kita bisa membuat serial menjadi file biner, sehingga file yang dihasilkan akan berkurang banyak. Kodenya adalah sebagai berikut:
FileStream fs = fileStream baru(@"XMLData.bin",FileMode.Create);
BinaryFormatter bf = BinaryFormatter baru();
bf.Serialisasi(fs,XMLData);
fs.colse();
File biner yang dihasilkan dengan cara ini disebut XMLBinary. Jika Anda membukanya langsung dengan WINHEX, Anda dapat melihat beberapa tag XML di dalamnya. Jika jumlah datanya besar, tambahkan sebaris kode:
XMLData.RemortingFormat = SerializationFormat.Binary;
File yang dihasilkan saat ini disebut file TrueBinary. Saat memproses sejumlah besar (lebih dari 10.000 baris), ukuran file yang dihasilkan adalah sebagian kecil dari XMLBinary. Skema secara otomatis disimpan selama serialisasi, membuat proses desequencing menjadi sederhana. Saya belum tahu seberapa besar penurunan kinerja deserialisasi dibandingkan dengan membaca XML secara langsung.
6. Manfaatkan kumpulan koneksi secara wajar.
Pengumpulan koneksi memainkan peran besar dalam meningkatkan kinerja dan diaktifkan secara default. Ukuran Min Pool default adalah 0, yang umumnya ditetapkan ke nilai yang relatif kecil, seperti 5. Ukuran Max Pool default adalah 100, yang cukup untuk sebagian besar situs WEB, tingkatkan dengan tepat.
7. Kembangkan menggunakan SQLCLR
Jika Anda berfokus untuk membuka seri SQL Server, Anda harus mempelajari SQLCLR. Ini sangat kuat dan dapat meningkatkan kinerja dalam banyak situasi (terutama aplikasi tingkat perusahaan besar).
8. Akses APP.Config/Web.Config melalui kelas statis
Kami memiliki banyak informasi konfigurasi di APP.Config/Web.Config, yang sangat sering diakses saat ini, kami membuat kelas statis. Semua atribut diakses melalui kelas statis, yang dapat meningkatkan kinerja sampai batas tertentu. Kelas statis hanya membuat instance Config satu kali, dan APP.Config/Web.Config akan menghasilkan banyak operasi IO.
kelas statis publik MyWebConfig
{
MyWebConfig() statis
{
KoneksiString =
ConfigurationManager.ConnectionStrings["Koneksi"].
String Koneksi;
}
string statis publik DbConnectionString
{
mendapatkan
{
kembalikan ConnString;
}
}
}
Oke, itu saja untuk hari ini, saya ingin menunjukkan jika ada kesalahan dan kekurangan, Anda dipersilakan untuk mengemukakan pendapat yang lebih baik dan membuat kemajuan bersama.