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