簡體   English   中英

使用集合屬性了解時間復雜度

[英]Understanding Time Complexity with Set Properties

我正在嘗試減少代碼中的行數,以提高 windows 應用程序的執行速度。 到目前為止,我已經了解了在 get 和 set 字段中添加條件時使用屬性的用處。 我不確定與在某些方法中設置基本值后跟條件語句相比,依賴屬性是否有助於提高時間復雜度。 我將舉例說明我首先做了什么以及我改進了什么。 如果有人可以就當前的改進是否有助於減少處理時間以及它是否遵循最簡單的 Big-O 表示法(希望為 O(n))分享一些建議,我將不勝感激。

老的

public float tempP1 = 1.0f;
public void addToP1() {
        tempP1 += 0.4f;
        tempP1 = (tempP1 > 2.0f) ? 2.0f : tempP1;
}

新的

private float _tempP1 = 1.0f;
public float tempP1 { get { return this._tempP1; }
        set {
                value = (value > 2.0f) ? 2.0f : value;
                this._tempP1 = value;
        }
}

public void addToP1() {
        tempP1 += 0.4f;
}

減少代碼行數並不總是意味着提高執行速度。

決定速度的因素首先是方法調用的數量(屬性是對 getter 和 setter 的調用),以及類型轉換、數據類型(例如數組或 List<>)、循環(for vs foreach)和條件測試、計算,以及諸如堆和堆棧使用、memory 訪問、I/O 訪問、硬件和軟件中斷之類的事情……

為了提高速度,您應該:減少方法調用,消除無用代碼,小心 select 類型,使用 for instead 或 foreach,避免 Linq,使用 StringBuilder 而不是 String 來操作大字符串...

您的“舊”代碼(5 行)幾乎按原樣優化。

即使編譯器對其進行了優化,您的“新”代碼(10 行)也不是因為getset引入的調用。

但是您可以使用 boolean 做得更好:

bool reached = false;
public float tempP1 = 1.0f;
public void addToP1()
{
  if ( reached ) return;
  tempP1 += 0.4f;
  reached = tempP1 > 2.0f;
  if ( reached )
    tempP1 = 2.0f;
}

您可以在發布模式下編譯並檢查項目設置/構建中是否啟用了優化。

有人可能會找到更好的優化,但它會使用深奧的代碼,通常不推薦這樣做。

您當然可以使用 IL。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM