做網(wǎng)站 用什么建站軟件好論壇推廣方案
有人提到這樣一個問題:”一個程序最多可以注冊多少個窗口類?”
問題的答案不是一個具體的數(shù)字。因為大多數(shù)用戶界面對象都來自一個共享的內(nèi)存池,我們稱之為”桌面堆內(nèi)存”。盡管我們可以計算一個最大的理論值,但是在實際的場景中,這個理論值不會達(dá)到,因為還有很多其他用戶界面對象也是在這個桌面堆中。
舉個例子,用戶可見的菜單對象和窗口對象保存在桌面堆中,還有一些其他不可見的對象也保存在其中,例如:激活的窗口枚舉,窗口的位置句柄,甚至掛接的線程輸入隊列等。
如果創(chuàng)建了過多的窗口或者菜單,則留給其他對象(例如,注冊窗口類)的空間就不多了,因為所有這些用戶界面對象都共享同一個內(nèi)存空間。
當(dāng)有人問這類問題的時候,通常真正的問題是他們的程序消耗了太多的桌面堆空間,程序可能需要重新設(shè)計,以節(jié)省對桌面堆資源的占用。例如,一個程序如果需要創(chuàng)建幾千個窗口類,這會極大的占用桌面堆空間,通常,這表明這個程序在設(shè)計方面需要做出調(diào)整。
另外一個類似的問題是:一個進(jìn)程最多可以創(chuàng)建多少個線程。我們可以計算出理論值,但這樣是一個程序需要重新設(shè)計的標(biāo)志。
另一方面來說,即使一個應(yīng)用程序真的可以創(chuàng)建幾千個窗口類,用戶使用起來也會感到疑惑,所以,從可用性的角度來說,最好還是重新設(shè)計,以不那么多的占用資源。
總結(jié)
程序開發(fā)早期,我會使用 GUI 對象監(jiān)測工具來查看創(chuàng)建的用戶界面對象的數(shù)量,看看是否有點(diǎn)“設(shè)計過重”。
因為一旦開發(fā)到了后期,重新設(shè)計的成本將會十分巨大。
最后
Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,里面有很多關(guān)于Windows的小知識,對于廣大Windows平臺開發(fā)者來說,確實十分有幫助。
本文來自:《On the unanswerability of the maximum number of user interface objects a program can create》