[英]Should I use static function in c# where many calls the same func?
John的控制台应用程序多次调用我的DLL函数(每秒约15次)。 我想把这个函数作为静态方法。
我知道 :
但我不知道这些是否是我需要问自己的唯一问题。
每个John对我的函数的调用都在他创建的新线程中。
这个问题的最佳实践答案是什么?
听起来可能有问题。 调用在多线程环境中对静态 (共享)对象进行操作的方法应该为您敲响警钟。
检查您的代码,如果有可能同时从两个(或多个)线程访问共享对象,请将该对象设为实例字段并生成方法实例方法。
当然,是否存在风险在很大程度上取决于实际代码(您没有显示),但所有调用都是非静态的,这意味着您可以降低潜在风险。
通常,如果您的静态方法不使用任何状态(即读取和写入静态字段和属性,或调用其他静态方法),则无论有多少都不会对调用者产生任何副作用他们开始的线程。
如果你要求最佳实践,静态方法通常是一个坏主意。 如果有的话,静态方法应仅用于非常通用的实用程序功能。
不建议使用,因为您无法预测需求是否会发生变化,并且您有一天需要某些状态。 然后你最好使用调用者可以实例化的类,并且你将破坏使用你的函数的所有现有代码。
关于垃圾收集,是的,确定有一些开销,但如果你走内存管理的OO的路线,这是目前的牺牲。 如果您想要更多控制,请使用不安全的代码或C ++或Vala等语言。
我同意Wiktor(+1),但也会补充说,如果静态方法需要同步,则使用多个实例可能更有效。 否则,拥有许多线程可能毫无意义,因为一次只能有一个线程访问临界区。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.