Rumah >pembangunan bahagian belakang >C++ >Bagaimanakah Saya Boleh Memunggah dengan Cekap Perhimpunan yang Dimuat dengan Assembly.LoadFrom()?

Bagaimanakah Saya Boleh Memunggah dengan Cekap Perhimpunan yang Dimuat dengan Assembly.LoadFrom()?

Susan Sarandon
Susan Sarandonasal
2025-01-02 20:36:39821semak imbas

How Can I Efficiently Unload an Assembly Loaded with Assembly.LoadFrom()?

Memunggah Perhimpunan Dimuatkan dengan Perhimpunan.LoadFrom()

Untuk menguji masa yang diambil oleh GetTypes() selepas memuatkan DLL, mari kita terokai proses memunggah dan memuat semula DLL.

Memunggah Perhimpunan

Apabila perhimpunan dimuatkan menggunakan Assembly.LoadFrom(), ia ditambahkan pada senarai perhimpunan AppDomain. Untuk memunggahnya, tiada kaedah eksplisit dalam Assembly atau AppDomain untuk memunggah. Walau bagaimanapun, anda boleh mencipta AppDomain baharu untuk memuatkan pemasangan dan kemudian memunggah AppDomain untuk melepaskan sumber.

Muat Semula dan Perbandingan Masa

Untuk memuat semula DLL, ikut langkah berikut:

  1. Buat AppDomain baharu dengan nama yang berbeza.
  2. Muatkan pemasangan ke dalam yang baharu AppDomain menggunakan AppDomain.Load().
  3. Dapatkan masa yang diambil oleh GetTypes() untuk pemasangan yang dimuat semula.
  4. Nyahmuat AppDomain untuk mengeluarkan sumber.

Contoh :

string file = "path/to/assembly.dll";

// First AppDomain
AppDomain dom1 = AppDomain.CreateDomain("domain1");
Assembly assem1 = dom1.Load(file);
Stopwatch sw1 = Stopwatch.StartNew();
var types1 = assem1.GetTypes();
sw1.Stop();
double time1 = sw1.Elapsed.TotalMilliseconds;
AppDomain.Unload(dom1);

// Second AppDomain
AppDomain dom2 = AppDomain.CreateDomain("domain2");
Assembly assem2 = dom2.Load(file);
Stopwatch sw2 = Stopwatch.StartNew();
var types2 = assem2.GetTypes();
sw2.Stop();
double time2 = sw2.Elapsed.TotalMilliseconds;
AppDomain.Unload(dom2);

Console.WriteLine($"First Load: {time1} milliseconds");
Console.WriteLine($"Second Load: {time2} milliseconds");

Contoh ini mencipta dua AppDomains dan memuatkan DLL ke dalam setiap satu. Ia kemudian mengukur masa yang diambil oleh GetTypes() untuk kedua-dua keadaan. Perbezaan dalam pemasaan boleh menunjukkan overhed yang ditanggung dengan memuat semula DLL.

Pengumpulan Sampah Eksplisit

assem = null tidak mencukupi untuk mengeluarkan sumber yang diperuntukkan kepada Perhimpunan. Memanggil pemungut sampah secara eksplisit juga tidak akan membantu, kerana sumber khusus AppDomain tidak diurus olehnya. Menggunakan AppDomain baharu ialah pendekatan yang disyorkan untuk memunggah pemasangan dan melepaskan sumber berkaitannya.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Memunggah dengan Cekap Perhimpunan yang Dimuat dengan Assembly.LoadFrom()?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn