Bagikan melalui


Fungsi CoFreeUnusedLibrariesEx (combaseapi.h)

Membongkar DLL apa pun yang tidak lagi digunakan dan yang penundaan pembongkarannya telah kedaluwarsa.

Sintaks

void CoFreeUnusedLibrariesEx(
  [in] DWORD dwUnloadDelay,
  [in] DWORD dwReserved
);

Parameter

[in] dwUnloadDelay

Penundaan dalam milidetik antara waktu dll menyatakan bahwa DLL dapat dibongkar sampai menjadi kandidat untuk dibongkar. Mengatur parameter ini ke INFINITE menggunakan penundaan default sistem (10 menit). Mengatur parameter ini ke 0 memaksa pembongkaran DLL apa pun tanpa penundaan.

[in] dwReserved

Parameter ini dicadangkan dan harus 0.

Nilai kembali

Tidak ada

Keterangan

COM memasok fungsi untuk mengklaim kembali memori yang disimpan oleh DLL yang berisi komponen. Fungsi yang paling umum digunakan adalah CoFreeUnusedLibraries. CoFreeUnusedLibraries tidak segera merilis DLL yang tidak memiliki objek aktif. Ada penundaan 10 menit untuk apartemen multithreaded (MTA) dan apartemen netral (NAs). Untuk apartemen berulir tunggal (STAs), tidak ada penundaan.

Penundaan 10 menit untuk CoFreeUnusedLibraries adalah untuk menghindari kondisi balapan multithread yang disebabkan oleh pembongkaran DLL komponen. Penundaan default ini mungkin terlalu lama untuk banyak aplikasi.

COM mempertahankan daftar DLL aktif yang telah memiliki komponen yang dimuat untuk apartemen yang dapat dihosting di utas tempat fungsi ini dipanggil. Ketika CoFreeUnusedLibrariesEx dipanggil, setiap DLL dalam daftar tersebut memiliki fungsi DllCanUnloadNow yang dipanggil. Jika DllCanUnloadNow mengembalikan S_FALSE (atau tidak diekspor), DLL ini belum siap untuk dibongkar. Jika DllCanUnloadNow mengembalikan S_OK, DLL ini dipindahkan dari daftar aktif ke daftar "candidate-for-unloading".

Menambahkan DLL ke daftar waktu candidate-for-unloading stempel waktu DLL dwUnloadDelay milidetik dari saat pemindahan ini terjadi. Ketika CoFreeUnusedLibrariesEx (atau CoFreeUnusedLibraries) dipanggil lagi, setidaknya dwUnloadDelay milidetik dari panggilan yang memindahkan DLL ke daftar candidate-for-unloading, DLL sebenarnya dibebaskan dari memori. Jika COM menggunakan DLL komponen saat DLL berada di daftar candidate-for-unloading, maka akan dipindahkan kembali ke daftar aktif.

Mengatur dwUnloadDelay ke 0 mungkin memiliki konsekuensi yang tidak terduga. DLL komponen mungkin memerlukan beberapa waktu untuk pembersihan setelah kembali dari fungsi DllCanUnloadNow . Misalnya, jika DLL memiliki utas pekerjanya sendiri, menggunakan nilai 0 kemungkinan besar akan menyebabkan masalah karena kode yang dijalankan pada utas ini akan tidak dipetakan, yang disebabkan oleh pembongkaran DLL sebelum utas pekerja memiliki kesempatan untuk keluar. Selain itu, menggunakan nilai yang terlalu singkat untuk dwUnloadDelay dapat menyebabkan masalah performa karena ada lebih banyak overhead dalam memuat ulang DLL daripada membiarkannya keluar dari halaman.

Perilaku ini dipicu oleh komponen penyediaan DLL dengan model utas diatur ke Gratis, Netral, atau Keduanya. Untuk model utas yang diatur ke Apartemen (atau jika tidak ada model utas yang ditentukan), dwUnloadDelay diperlakukan sebagai 0 karena komponen ini terikat dengan utas tunggal yang menghosting apartemen.

Persyaratan

Persyaratan Nilai
Klien minimum yang didukung Windows XP [aplikasi desktop | Aplikasi UWP]
Server minimum yang didukung Windows Server 2003 [aplikasi desktop | Aplikasi UWP]
Target Platform Windows
Header combaseapi.h (termasuk Objbase.h)
Pustaka Ole32.lib
DLL ComBase.dll

Lihat juga

CoFreeAllLibraries

CoFreeLibrary

CoFreeUnusedLibraries

CoLoadLibrary

DllCanUnloadNow