2010-10-09 46 views
1

我有一個在我的程序中使用了很多的嚮導類。不幸的是,該向導需要一段時間才能加載,主要是因爲GUI框架非常慢。我試圖多次重新設計嚮導類(比如使對象可重用,所以它只創建一次),但我總是在某處碰到磚牆。那麼,在這一點上,將這個野獸的50個實例加載到一個矢量中並在我使用它時彈出它們,這是一個巨大的醜陋攻擊?這種方式延遲只會在啓動時被注意到,並在此後運行良好。太多的黑客?這樣的結構是否共同?創建我的對象需要很長時間。在啓動時創建大量實例以便稍後加快速度是不好的做法嗎?

+0

std :: vector.reserve()確實如此,這是一個糟糕的設計? – Grozz 2010-10-09 23:03:57

回答

2

在遊戲中,我們經常首先分配和構造遊戲會話中需要的所有東西。然後我們回收這些對象,如果它們的生命期很短,試圖在遊戲會話運行時獲得0分配/釋放。

所以,不,它不是一個真正的黑客攻擊,讓計算機做更少的工作以獲得更快的速度是很有道理的。一種策略是「緩存」,即一般情況下,首先計算您的非變量數據,然後使用動態數據運行。在可能和必要的情況下,必須在使用之前準備內存分配,對象構造等。

0

是的,這是不好的做法,它打破了RFC2549標準。

好吧,我只是在開玩笑。做任何最適合你的應用的東西。這不是「黑客」或「標準」的問題。

只要確保你有適當的文件,說明什麼不像應該的那樣直截了當(如黑客)。

相信我,如果5K的投資產生了大量黑客(如Windows)的產品,那麼他們[黑客]必須在某個時刻真正幫助。

0

不幸的是,嚮導需要一段時間才能加載,主要是因爲GUI框架非常慢。

是不是一個嚮導只是一個基於表單的模板?這不應該帶來實質性的開銷嗎?查找什麼會減慢框架(未壓縮的背景圖像?)並修復根本原因。

作爲一種權宜之計,您可以在後臺創建窗口,並在用戶詢問之前不顯示它們。但顯然這只是將問題轉移到其他地方。即使你在啓動時在後臺線程中創建它們,用戶的第一個命令可能會要求最後一個嚮導,然後它們必須等待50倍的時間......他們可能會將其解釋爲崩潰。至少,預測並測試這樣的角落案例。還要在低RAM設置上進行測試。

相關問題