2012-03-20 55 views
5

Virtual method interception可用於'proxify'方法,以便可以在原始方法之前和之後執行自定義代碼。我可以使用TVirtualMethodInterceptor實現實例計數監視嗎?使用Delphi XE引入的

這是否也可用於通過代理虛擬方法TObject.AfterConstruction和TObject.BeforeDestruction來保持Delphi應用程序中所有對象實例的計數?

如果是,這可能是一種在運行時分析FastMM4內存分配統計信息的簡單方法(使用對象的InstanceSize屬性並將其與分配的內存塊進行匹配)。


更新:對不起,問這是很容易從DocWiki信息回答一個問題 - 我已閱讀鏈接的文章第一個也是唯一脫脂示例代碼

+0

...是嗎?我看不出爲什麼。你試過了嗎?實現代理,遞增和遞減計數器(可能使用[線程安全增量/遞減](http://msdn.microsoft.com/en-us/library/windows/desktop/ms683614(v = vs.85).aspx )),呃...你去了。 – 2012-03-20 17:30:09

+0

難道你不能通過修改FastMM來更簡單地做到這一點嗎? – 2012-03-20 17:51:49

+0

@WarrenP FastMM不知道它提供內存塊的實際類型,它只處理內存分配/釋放請求 – mjn 2012-03-20 17:58:49

回答

3

不,那是行不通的。從documentation,與我的重點:

允許用戶動態地截距上指定實例特定類型的虛擬方法調用。

問題是,您需要掌握每一個實例,然後才能進行代理。但是你希望通過代理來獲得實例。所以你現在陷入了雞和雞蛋的情況。

相關問題