Bagikan melalui


Meningkatkan Performa dengan Pengumpulan Objek

Pengumpulan objek bisa sangat efektif dalam keadaan tertentu, menghasilkan peningkatan performa yang substansial. Ide umum untuk menggunakan kembali objek untuk keuntungan terbaik adalah mengumpulkan sumber daya sebanyak mungkin, memperhitungkan inisialisasi dari pekerjaan aktual yang dilakukan, dan kemudian secara administratif menyesuaikan karakteristik kumpulan dengan perangkat keras aktual pada waktu penyebaran. Artinya, Anda harus melanjutkan sesuai dengan langkah-langkah berikut:

  1. Tulis objek sehingga dapat memperhitungkan inisialisasi mahal dan akuisisi sumber daya yang dilakukan untuk klien apa pun sebagai prasyarat untuk melakukan pekerjaan aktual atas nama klien. Tulis konstruktor objek berat untuk mengumpulkan sumber daya sebanyak mungkin sehingga ini dipegang oleh objek dan segera tersedia ketika klien mendapatkan objek dari kumpulan.
  2. Secara administratif mengonfigurasi kumpulan untuk mencapai keseimbangan terbaik dalam sumber daya perangkat keras yang tersedia, biasanya memperdagangkan memori yang didedikasikan untuk mempertahankan kumpulan ukuran tertentu sebagai ganti akses klien dan penggunaan objek yang lebih cepat. Pada titik tertentu, pengumpulan akan mencapai pengembalian yang berkurang dan Anda bisa mendapatkan performa yang cukup baik sambil membatasi kemungkinan penggunaan sumber daya oleh komponen tertentu.

Melakukan Pekerjaan Aktual atau Memperoleh Sumber Daya

Jika Anda memiliki komponen yang akan digunakan klien secara singkat dan berturut-turut cepat, di mana sebagian besar waktu penggunaan objek dihabiskan dalam memperoleh sumber daya atau menginisialisasi sebelum melakukan pekerjaan tertentu untuk klien, kemungkinan besar menulis komponen Anda untuk menggunakan pengumpulan objek akan menjadi kemenangan besar bagi Anda.

Anda dapat menulis komponen sehingga di konstruktor objek Anda melakukan sebanyak mungkin pekerjaan yang memakan waktu yang seragam untuk semua klien—memperoleh satu atau beberapa koneksi, menjalankan skrip, mengambil data inisialisasi dari file atau di seluruh jaringan, dan sebagainya. Ini memiliki efek mengumpulkan setiap sumber daya tersebut. Anda mengumpulkan kombinasi sumber daya dan status generik yang diperlukan untuk melakukan beberapa pekerjaan.

Dalam keadaan ini, ketika klien mendapatkan objek dari kumpulan, mereka memiliki sumber daya tersebut segera tersedia. Biasanya, mereka akan menggunakan objek untuk melakukan beberapa unit kecil pekerjaan, mendorong atau menarik data, dan kemudian objek akan memanggil IObjectContext::SetComplete atau IObjectContext::SetAbort dan kembali. Dengan pola penggunaan api cepat seperti ini, pengumpulan menghasilkan manfaat performa yang sangat baik. Anda dapat sepenuhnya memanfaatkan kesederhanaan model pemrograman transaksi otomatis stateless namun mencapai performa setara dengan komponen stateful tradisional.

Namun, jika klien menggunakan objek untuk waktu yang lama setiap kali mereka menyebutnya, pengumpulan akan kurang masuk akal. Keuntungan kecepatan yang Anda peroleh adalah marginal karena waktu penggunaan meningkat relatif terhadap waktu inisialisasi. Anda mendapatkan pengembalian yang berkurang yang mungkin tidak membenarkan biaya memori yang diperlukan untuk menyimpan kumpulan objek aktif.

Berbagi Biaya di Beberapa Klien

Variasi tentang memperhitungkan inisialisasi adalah Anda dapat menggunakan pengumpulan untuk mengamortisasi biaya memperoleh sumber daya yang mahal secara statistik. Jika Anda mengambil hit akuisisi atau inisialisasi sekali dan kemudian menggunakan kembali objek, Anda berbagi biaya tersebut di semua klien yang menggunakan objek selama masa pakainya. Waktu konstruksi berat hanya dikeluarkan sekali per objek.

Objek Pra-alokasi

Jika Anda menentukan ukuran kumpulan minimum nonzero, jumlah minimum objek tersebut akan dibuat dan dikumpulkan saat aplikasi dimulai, siap untuk klien apa pun yang memanggil aplikasi.

Mengatur Penggunaan Sumber Daya dengan Manajemen Kumpulan

Anda dapat menggunakan ukuran kumpulan maksimum untuk mengatur dengan sangat tepat cara Anda menggunakan sumber daya. Misalnya, jika Anda telah melisensikan sejumlah koneksi database tertentu, Anda dapat mengontrol berapa banyak koneksi yang telah Anda buka kapan saja.

Ketika Anda mempertimbangkan pola penggunaan klien, karakteristik penggunaan objek, dan sumber daya fisik seperti memori dan koneksi, Anda cenderung menemukan beberapa titik keseimbangan optimal ketika Anda melakukan penyetelan performa. Objek pengumpulan akan menghasilkan pengembalian yang berkurang setelah titik tertentu. Anda dapat menentukan tingkat performa apa yang Anda butuhkan dan menyeimbangkan terhadap sumber daya apa yang diperlukan untuk mencapainya.

Untuk memfasilitasi penyetelan performa saat mengonfigurasi pengumpulan objek, Anda dapat memantau statistik objek untuk komponen dalam aplikasi. Untuk detailnya, lihat Memantau Statistik Objek.

Meningkatkan Performa Komponen yang Diaktifkan JIT

Pengumpulan objek bekerja dengan sangat baik dengan layanan aktivasi just-in-time COM+. Dengan mengumpulkan objek yang diaktifkan JIT, Anda dapat mempercepat aktivasi ulang objek. Anda mendapatkan manfaat menahan saluran terbuka oleh aktivasi JIT sambil mengurangi biaya reaktivasi. Anda dapat menggunakan pengumpulan dalam hal ini untuk mengatur berapa banyak memori yang ingin Anda alokasikan ke objek yang memiliki referensi aktif.

Anda kemungkinan besar akan mengumpulkan komponen yang diaktifkan JIT saat bertransaksi. Pengumpulan objek dioptimalkan untuk menangani komponen transaksi. Untuk informasi selengkapnya, lihat Mengumpulkan Objek Transaksi.

COM+ String Konstruktor Objek

Mengontrol Masa Pakai dan Status Objek

Cara Kerja Pengumpulan Objek

Mengumpulkan Objek Transaksi yang Bertransaksi

Persyaratan untuk Objek yang Dapat Dikumpulkan