我現在有個專案,功能非常多,我現在想重構,大家幫忙分析下性能。
我現在的想法是把每個功能模塊化,也就是一個功能搞成一個單元(以前是基本所有功能都在一個單元里,而且都是全域函式或變數)。
比如說原功能:
type
var
b: Integer;
{省略N多變數宣告}
procedure a();
{省略N多程序宣告}
implementation
現在我想新搞一個單元
Txx = class
public
b: Integer;
procedure a();
end;
(這種類那么就是一個功能一個類,在總工程創建主表單里每個類都要create一次,性能如何?)
Txx = record
b: Integer;
procedure a();
end;
(這種我測驗結構體里也可以有程序,他不需要創建只需要宣告即可,性能如何?)
還有就是新搞一個單元
type
var
b: Integer;
procedure a();
implementation
在其他單元呼叫的時候 搞成 單元名.a 這種方法使用(這種應該屬于靜態的,意義是 單元名是功能, 功能.程序)
以上三種那種效率好呢? 第一個類,我怕很多很多類都create那么效率就不行吧,不過現在有個類方法,類方法不需創建,不了解他的性能如何?
大家幫忙解密疑團,在此謝過
uj5u.com熱心網友回復:
建議使用類進行封裝,代碼可讀性、可維護性比性能重要的多,當然,你如果要追求性能,那么拋棄一切OOP的思想,使用面向程序的編程方法,再加上部分函式使用匯編實作,這樣性能提升會比較明顯。uj5u.com熱心網友回復:
匯編我是不懂了,我也只是想把每個功能模塊封裝下,除了我上面3種封裝方式,還有其他方法嗎? 以上3種方法建議使用類嗎? 很多類一起create好像很慢
uj5u.com熱心網友回復:
你要了解Create到底干了些什么,就知道到底慢不慢了,不要想當然“創建”就是繁瑣的,除了一些自定義的初始化,Create其實只是為類結構申請了記憶體,就像你結構體+方法一樣,類的構造,等于申明了一個結構體指標并為該指標分配記憶體空間。
uj5u.com熱心網友回復:
建議使用類進行封裝,代碼可讀性、可維護性比性能重要的多,當然,你如果要追求性能,那么拋棄一切OOP的思想,使用面向程序的編程方法,再加上部分函式使用匯編實作,這樣性能提升會比較明顯。
匯編我是不懂了,我也只是想把每個功能模塊封裝下,除了我上面3種封裝方式,還有其他方法嗎? 以上3種方法建議使用類嗎? 很多類一起create好像很慢
你要了解Create到底干了些什么,就知道到底慢不慢了,不要想當然“創建”就是繁瑣的,除了一些自定義的初始化,Create其實只是為類結構申請了記憶體,就像你結構體+方法一樣,類的構造,等于申明了一個結構體指標并為該指標分配記憶體空間。
申請空間這個我到是知道的,如我原來的代碼全部都是全域變數 全域函式,我把每個功能改成每個類呼叫差距大嗎? 不好意識,我不知道如何測驗他倆的性能,類應該占用記憶體多一些,最少類要保存有個指標地址在記憶體中
uj5u.com熱心網友回復:
建議使用類進行封裝,代碼可讀性、可維護性比性能重要的多,當然,你如果要追求性能,那么拋棄一切OOP的思想,使用面向程序的編程方法,再加上部分函式使用匯編實作,這樣性能提升會比較明顯。
匯編我是不懂了,我也只是想把每個功能模塊封裝下,除了我上面3種封裝方式,還有其他方法嗎? 以上3種方法建議使用類嗎? 很多類一起create好像很慢
你要了解Create到底干了些什么,就知道到底慢不慢了,不要想當然“創建”就是繁瑣的,除了一些自定義的初始化,Create其實只是為類結構申請了記憶體,就像你結構體+方法一樣,類的構造,等于申明了一個結構體指標并為該指標分配記憶體空間。
申請空間這個我到是知道的,如我原來的代碼全部都是全域變數 全域函式,我把每個功能改成每個類呼叫差距大嗎? 不好意識,我不知道如何測驗他倆的性能,類應該占用記憶體多一些,最少類要保存有個指標地址在記憶體中
你要關心性能就別用面向物件,面向物件有額外開銷,相比代碼可讀可維護性來說,這點開銷幾乎可以忽略不計,說白了你追求錯了方向,你只要代碼沒問題,邏輯正常,再慢也慢不過虛擬機類語言,比如.net,java,這類語言運行都不存在性能問題,所以別杞人憂天了,好好寫好代碼,讓自己的代碼更易讀易維護,真要優化就如我上面說的,別用面向物件,加上呼叫頻率高的函式使用匯編,但是,我得提醒你的是,大部分人寫出來的匯編代碼,還比不上編譯器編譯出來的。
uj5u.com熱心網友回復:
如果只是想把程式整理得清楚一點,又不想創建太多的物件的話,我建議用LZ最后一種方法,這樣呼叫的地方更改還少一些。uj5u.com熱心網友回復:
一般類的創建,應該是很快的,不會是性能的瓶頸uj5u.com熱心網友回復:
2和3結合。用不用類完全得看你的設計,一般專案都會有一個單元叫Global放一些全域變數和函式,這里面叫單元方法,參考了單元就可以用,你看很多系統函式都是這種,參考單元就可以用,而不是類方法。
uj5u.com熱心網友回復:
應該差不多,沒什么太大區別!主要看怎么用著方便吧!影響性能的一般都是資料庫之類的操作,至于你的創建和釋放應該差別不大!轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/114620.html
標籤:語言基礎/算法/系統設計
