2014-02-11 136 views
1

我有一個單體靜態類,其中包含設置Settings.Instance.MemberName
該類在GlobalSettings項目中包含多個項目的解決方案。單身靜態成員vs靜態本地會員vs本地會員

所有項目都編譯爲DLL並由外部Windows服務進程使用。
在此解決方案的一個項目中,我有100-200個實例ClassA,此類用於使用網絡套接字輪詢來自設備的數據。
輪詢是通過某些邏輯完成的,而我使用的設置來自Settings.Instance, ,例如,設置是輪詢之間的休眠時間。

socket.Send(..); 
Thread.Sleep(Settings.Instance.SleepBetweenSendAndReceive); 
socket.Receive(..); 

我的問題是,有什麼更好的做法?

  1. 所有的實例應該像上面直接調用Settings.Instance.MaxNetworkRetries。

  2. 在ClassA的構造函數,我應該載入所有設置到本地靜態私有成員

    (Thread.sleep代碼(_sleepBetweenSendAndReceive);)

  3. 在ClassA的構造函數,我應該加載所有設置到本地私人會員

    (Thread.Sleep(_sleepBetweenSendA ndReceive);)

什麼會給予最好的性能?或者也許根本沒有區別。

+3

您是否遇到過與該代碼相關的任何性能問題?甚至更重要的問題:程序執行過程中'Settings.Instance.MemberName'值是否有可能改變? – MarcinJuraszek

+0

他們不會改變。我在使用套接字的過程中遇到了性能問題,爲了使代碼更好地工作,我盡我所能,我知道這是次要的改進,如果有的話......我只是好奇什麼更好,教育目的還。 – ilansch

回答

2

無論如何,我無法想象這裏有任何性能問題,如果你想要做的就是Sleep()

當涉及網絡通信時,網絡通常是瓶頸,並且屬性調用的開銷是可忽略的。

如果您想提高應用程序的性能,您可以刪除Sleep(),並在Receive()上阻止或異步接收數據(如果您不確定是否要接收數據)。

但最終,在同級別訪問場應該比靜態類的屬性的屬性更快。你可以在沒有網絡通信的情況下編寫一個示例項目,併爲其分配時間。

+0

我已經解決了網絡問題,至少其中的一部分..這個問題關於調用我的類的靜態成員,我的類的私人成員或從另一個DLL加載到相同的過程靜態成員.. – ilansch

+0

@ilansch來自另一個類的訪問成員與同一個類有一些開銷,但不管它是否來自不同的dll。我真正知道的是,你通常不會注意到任何性能差異。如果你想要數字,很容易進行基準測試。 –