繁体   English   中英

我应该在c#中使用静态函数,其中许多调用相同的函数?

[英]Should I use static function in c# where many calls the same func?

John的控制台应用程序多次调用我的DLL函数(每秒约15次)。 我想把这个函数作为静态方法。

我知道 :

  1. 它只能访问静态道具和对象。
  2. 它不需要实例来运行该功能。

但我不知道这些是否是我需要问自己的唯一问题。

每个John对我的函数的调用都在他创建的新线程中。

  • 如果我的功能出错,这将如何影响所有其他通话?
  • 我是否应该将此函数作为具有类的实例的常规函数​​(John将创建)?
  • GC怎么样?

这个问题的最佳实践答案是什么?

听起来可能有问题。 调用在多线程环境中对静态 (共享)对象进行操作的方法应该为您敲响警钟。

检查您的代码,如果有可能同时从两个(或多个)线程访问共享对象,请将该对象设为实例字段并生成方法实例方法。

当然,是否存在风险在很大程度上取决于实际代码(您没有显示),但所有调用都是非静态的,这意味着您可以降低潜在风险。

通常,如果您的静态方法不使用任何状态(即读取和写入静态字段和属性,或调用其他静态方法),则无论有多少都不会对调用者产生任何副作用他们开始的线程。

如果你要求最佳实践,静态方法通常是一个坏主意。 如果有的话,静态方法应仅用于非常通用的实用程序功能。

不建议使用,因为您无法预测需求是否会发生变化,并且您有一天需要某些状态。 然后你最好使用调用者可以实例化的类,并且你将破坏使用你的函数的所有现有代码。

关于垃圾收集,是的,确定有一些开销,但如果你走内存管理的OO的路线,这是目前的牺牲。 如果您想要更多控制,请使用不安全的代码或C ++或Vala等语言。

我同意Wiktor(+1),但也会补充说,如果静态方法需要同步,则使用多个实例可能更有效。 否则,拥有许多线程可能毫无意义,因为一次只能有一个线程访问临界区。

暂无
暂无

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

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