繁体   English   中英

关于C#和静态类和函数的一个问题

[英]A Question About C# and Static Classes and Functions

我在这里看到了很多关于这个主题的讨论。

如果我有一个静态类w /静态方法连接到数据库或服务器,在多用户环境(如网页)中使用它是不是一个坏主意? 这是否会让新用户在接受新用户之前等待以前用户的线程完成他们的呼叫?

多线程也会带来什么影响呢?

谢谢!

如果每个静态方法完全负责获取其资源,然后将其资源置于方法调用的范围内(没有共享状态),那么使用实例类时不应该遇到线程问题。 但是,我建议,更大的问题是依赖公共静态方法(在静态或非静态类中)会在未来产生许多其他设计问题。

  • 首先,你对一个实现非常紧密地绑定,这总是很糟糕。
  • 其次,测试依赖于静态方法的所有类变得非常困难,因为您已经锁定了单个实现。
  • 第三,创建非线程安全方法变得非常容易,因为静态方法只能具有静态(在所有方法调用中共享)。

静态方法在多线程方面没有任何特殊行为。 也就是说,您可以预期该方法的几个“副本”同时运行。 静态变量也是如此 - 不同的线程可以同时访问它们,没有等待。 除非你小心,否则这会造成混乱。

是的,这是一个坏主意。

当您为所有用户使用一个连接时,如果有人执行需要的操作,比如说15秒,仅用于数据库访问,则所有其他用户必须等待才能连接到数据库

这个问题有点紧张。 至于为什么你有这么多静电。

但是我认为你在询问线程问题,所以我想去看一下有关线程的一些文档.http://msdn.microsoft.com/en-us/library/c5kehkcz(VS.80).aspx

Static仅定义定义方法的范围,以及如何绑定/调用方法。 它与多线程无关。

您需要小心静态字段。 它们由所有线程共享。 线程不是在等待彼此,但是你需要锁才能使它工作。

但是如果你的应用程序比Hello World复杂一点,你应该考虑让你的方法不是静态的,而是使用面向对象的模式。

如果使用一个静态连接来访问数据库,则必须同步方法调用。 通过单个连接向数据库询问数据的多个线程将......嗯......搞砸了。 因此,您要序列化所有线程的数据访问权限,这将对性能产生很大影响。

如果每个调用都打开自己的连接,则不需要序列化所有线程,因为没有共享连接。 每个请求创建一个连接仍然是一个昂贵的设计。

如果使用静态连接池,则会降低性能影响,因为您只需要序列化对连接池的访问。

此外,静力学通常不是一个好的设计决策 - 它们使单元测试非常复杂。 您应该考虑使用Singleton或Monostate模式。

如果你做对了 ,那就没问题了。 如果你做错了 ,它有可能强制顺序访问资源。

有时,正确和错误之间的区别可能非常微妙且难以发现,但主要的是没有方法应该依赖或锁定类的任何“状态”(成员)。

我使用静态方法查找对象。 我可以在一个地方(使用缓存)为asp.net应用程序管理所有查找对象,所有方法都使用静态方法调用它。

通过这种方式,我不需要在每次需要时实例化查找对象,并且它减少了调用DB以提高性能的需要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM