2012-03-20 9 views
5

Virtual method interception - introdotto con Delphi XE - può essere utilizzato per i metodi "proxify" in modo che il codice personalizzato possa essere eseguito prima e dopo il metodo originale.È possibile implementare il monitoraggio del conteggio delle istanze mediante TVirtualMethodInterceptor?

Potrebbe essere utilizzato anche per mantenere un conteggio di tutte le istanze di oggetti in un'applicazione Delphi, mediante proxyfying dei metodi virtuali TObject.AfterConstruction e TObject.BeforeDestruction?

Se sì, questo potrebbe essere un modo semplice per analizzare le statistiche di allocazione della memoria di FastMM4 in fase di esecuzione (utilizzando la proprietà InstanceSize degli oggetti e confrontandola con i blocchi di memoria allocati).


Aggiornamento: Ci scusiamo per fare una domanda che era molto facile rispondere dalle informazioni DocWiki - Ho letto l'articolo collegato prima e unica scremato il codice di esempio

+0

... si? Non riesco a vedere perché no. Hai provato? Implementare i proxy, incrementare e decrementare un contatore (possibilmente utilizzando [incrementi/decrementi thread safe] (http://msdn.microsoft.com/en-us/library/windows/desktop/ms683614 (v = vs.85) .aspx)) e, ehm ... eccoti. –

+0

Non potresti farlo molto più facilmente modificando le fonti FastMM? –

+0

@WarrenP FastMM non è a conoscenza dei tipi effettivi per cui fornisce i blocchi di memoria, elabora solo le richieste di allocazione/deallocazione di memoria – mjn

risposta

3

No, che non sta andando a lavorare. Dal documentation, con la mia attenzione:

permette all'utente di intercettare in modo dinamico le chiamate di metodo virtuali su istanze specificate di un particolare tipo di classe.

Il problema è che è necessario disporre di ogni istanza prima di poter proxify. Ma speri di proxify per ottenere istanze. Quindi ora sei catturato in uno scenario di galline e uova.

Problemi correlati