Il set di lavoro di un'app gestita può essere ridotto scaricando le librerie non gestite con AfxFreeLibrary?

StackOverflow https://stackoverflow.com/questions/213627

  •  03-07-2019
  •  | 
  •  

Domanda

Ho un'applicazione Windows gestita che carica un componente C ++ gestito che utilizza AfxLoadLibrary per caricare un componente di terze parti, se presente sul computer client. Una volta rilevato, sto scaricando il componente utilizzando AfxFreeLibrary nel tentativo di abbassare il working set dell'applicazione principale gestita.

La chiamata a AfxFreeLibrary ha esito positivo (verificata mediante Process Explorer), ma non viene liberata memoria. Ciò è dovuto alla natura di un'applicazione gestita o esiste un modo per liberare questo spazio di processo?

Non sto cercando modi alternativi per affrontare questo problema in generale, poiché il codice è già in produzione, piuttosto vorrei scoprire se l'approccio dello scarico è utile.

È stato utile?

Soluzione

Dovrebbe farlo, puoi dimostrarlo scrivendo un'app nativa pura e vedendo il set funzionante. Tuttavia, il set di lavoro è la dimensione della memoria richiesta per eseguire l'app, quindi se il codice utilizzato dalla dll può essere scambiato, il set di lavoro non verrà ridotto - Windows non lo considera come parte del set di lavoro .

Se la DLL ha memoria privata allocata al processo, non può essere scambiata, quindi conta e ridurrà il working set.

quindi la risposta è che dipende. Non è garantito che faccia alcuna differenza, e se la dll non viene utilizzata, sarà sostituita e non fa parte del set di lavoro corrente. Potresti anche non preoccuparti di scaricarlo, a meno che non ti piaccia mantenere le cose in ordine.

L'unico modo per ridurre il working set è fare in modo che la tua app utilizzi meno memoria. Essendo un'app .NET, è probabile che tu non abbia alcun controllo su di essa (poiché il GC si deciderà su quanta memoria è "attiva" e necessaria nel set di lavoro)

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top