2014-03-26 24 views
0

我覺得需要重新說明我的問題。獲得靜態列表<T>的最佳方法是什麼?

我的問題是。獲得我可以在整個項目中使用的相同列表的最佳方式是什麼?

我的代碼看起來像現在這樣:

public static class MessagingController 
{ 
    static List<MessagingDelivery> MessagingDeliveryList = Messaging.GetMessagingDeliveryList(); 
} 


internal static class Messaging 
{ 
    static List<MessagingDelivery> MessagingDeliveryList; 

    static Messaging() 
    { MessagingDeliveryList = new List<MessagingDelivery>(); } 

    internal static void CreateMessagingText(short reference, short number, string text) 
    { MessagingDeliveryList.Add(new MessagingDelivery(reference, number, text)); } 


    internal static void ChangeMessagingDelivery(short reference, string status, string error) 
    { MessagingDelivery.ChangeStatus(reference, status, error); } 


    internal static List<MessagingDelivery> GetMessagingDeliveryList() 
    { return MessagingDeliveryList; } 
} 

老問題:

什麼是 「最佳實踐」 爲獲得static List<T>爲什麼?

代碼1:

public static List<MessagingDelivery> messagingDeliveryList 
    = Messaging.GetMessagingDeliveryList(); 

代碼2:

static List<MessagingDelivery> messagingDeliveryList 
    = Messaging.GetMessagingDeliveryList(); 

public static List<MessagingDelivery> MessagingDeliveryList 
    { get { return messagingDeliveryList; } } 

我假設代碼1是最快的方法。是否有充分的理由使用Code 2?

+0

如果您唯一需要做的就是簡單地獲取列表,那麼沒有理由使用代碼2。 – kdh

+0

http://stackoverflow.com/questions/295104/what-is-the-difference-between-a-field-and-a-property-in-c – adrianbanks

+5

'靜態'在這裏並不重要,它更多關於差異字段和屬性之間:http://stackoverflow.com/questions/653536/difference-between-property-and-field-in-c-sharp-3-0 – MarcinJuraszek

回答

0

雖然第一個會變得更快,但我認爲通過限制對訪問者的訪問,第二個將更容易維護。

選擇一個平庸的例子:如果在幾周內突然需要處理加密或有限的訪問權限,則只有一個地方可以進行更改。在第一個例子中,你需要在程序中搜索訪問你的列表的地方,這對你的時間使用效率要低得多。爲了安全性,尤其是,如果您在整個程序中開始丟棄訪問令牌或密鑰,甚至可能是危險的。

所以,這取決於你需要什麼。在生產中,除非方法調用/返回的少量額外週期對於目的而言非常重要(對於某些情況可能是這種情況),否則我會選擇第二個。

+4

我不認爲它會更快。無論如何,JIT編譯器會優化它。 – MarcinJuraszek

+0

這很難說。鑑於哪些訪問器可以做,它可能不值得基本上是語義級優化(當然,我們可以檢查CIL,但是......)。無論哪種方式,我們都在談論絕對最多的十幾條指令。幾乎不明顯。 –

6

都沒有。一個名字聽起來像一個積極使用的對象(而不是不可變的配置數據)的靜態List<T>並不快或慢:它只是被打破了。無論代碼運行速度有多快都無關緊要(儘管運行速度越快,越早且越頻繁地發現它會中斷)。除此之外,在JIT完成內聯操作之前,在所示的兩個選項之間幾乎不會有明顯的差異。

除此之外:那根本不是你的瓶頸。例如,你想要與清單?搜索?附加?刪除 - 從 - 正確的?從左邊開始?通過索引獲取?所有這些都是實際花費的時間。不是列表引用查找。

相關問題