偶然發現靜態函式與效能一例

2021-09-05 14:17:00 字數 621 閱讀 5654

在乙個圖形化顯示的系統中,採用的是重寫button類後,建立例項,通過演算法擺放到panel之中,用於對像顯示地圖那樣顯示它們。

偶然間,發現乙個效能上的問題,弄的不是很清楚:

在重寫的button中,原本有乙個imagelist來記錄了當前按鈕的可以用的圖象,原來,因為寫**的人的失誤,直接在建立每乙個button例項裡,其中也相同的建立了乙個imagelist例項。

在實際的顯示中,發現,即使是把該imagelist物件在繼承的button中進行static化,效能也沒有絲毫的改觀,顯示速度仍是非常的慢。

後來,進行重構時,發現,把所有的imagelist放在一起,易於管理,自然而然的,也用了單例模式。結果,驚訝的發現,效能也大有提公升。

思路比較模糊,沒有弄清這是為什麼。

考慮到在button的子類中進行static與在另乙個類中進行static,原則上應該是一樣的,因為static本身並不是類的定義的一部分,它是在類之外的。

目前考慮到的可能是:問題出在imagelist的物件本身,它是通過stream來讀取持久後的影象,如果是在類之中的static的imagelist,很有可能,在每次訪問時,均進行了再次讀寫,所以大大地影響了效率。而在以單例的訪問中,因為只讀寫一次後,就放入了記憶體之中,所以效率會大大提高。

靜態函式與非靜態函式的區別

靜態成員函式和非靜態成員函式的根本區別在於有無this指標。非靜態函式由物件名或者物件指標 呼叫,呼叫時編譯器會向函式傳遞this指標 靜態成員函式則由類名 或者物件名呼叫 非靜態函式中有this指標,靜態函式中沒有this指標,不能訪問物件的成員函式,成員函式有this指標,const修飾this...

靜態成員與靜態函式

靜態成員和函式可以被所有物件共享使用 當它的值發生變化時,所有物件中的值隨之發生變化 而普通物件中的成員的值變化時,並不影響其他物件中的值 1.靜態成員變數和函式的宣告 在前邊加上關鍵字 static static double rate 2.定義 靜態成員的定義 靜態成員一定需要定義 變數的型別 ...

非靜態函式,非靜態變數與靜態函式,靜態變數

一 函式 函式的引入可以減少程式的目標 實現程式 的共享。但是,函式呼叫也需要一些時間和空間方面的開銷,因為呼叫函式實際上將程式執行流程轉移到被調函式中,被調函式的程式 執行完後,再返回到呼叫的地方。這種呼叫操作要求呼叫前保護現場並記憶執行的位址,返回後恢復現場,並按原來儲存的位址繼續執行。對於較長...