2014-02-11 67 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。我真正知道的是,你通常不会注意到任何性能差异。如果你想要数字,很容易进行基准测试。 –