如何解决C#-滥用静态变量
我在PR中有一个如下所示的类(出于目的而重构),一个正在休假的年长者说我滥用静态变量,应该在方法之间传递变量。
class Class {
static int dataPool;
// the below methods are called cyclicly for the duration of the application,// xxxx times,First method is called and then Second is called,// over and over
public static void First()
{
// at the start,reads dataPool count to do computation
// at the end,set dataPool count based on computation
}
public static void Second()
{
// at the start,read dataPool count to do some computation
// at the end,set dataPool count based on computation
}
}
我想了解为什么使用像上面这样的变量是“不好”的学习。谁能解释一下?
解决方法
我想了解为什么使用像上面这样的变量是“不好”的学习。谁能解释一下?
主要原因:
- 这意味着您的代码不再可重入。
- 这意味着您的代码不再是线程安全的(甚至是 less 线程安全的)并且不能同时运行。
- 这意味着您的代码处于意外状态(请参阅:最低惊讶原则)。
- 这意味着您的代码在多线程系统中的性能会很差(即使它是严格的单线程且没有可重入的),因为具有可变的静态状态意味着您的编译器无法优化程序对内存的使用,因为它不能保证线程所有权数据的。缓存一致性是昂贵。
- 这意味着您不能正确地对代码进行单元测试(使用严格的“单元测试”定义,而不是Visual Studio的定义)。
- 这意味着JIT编译器无法最大程度地优化程序,否则就无法对静态状态的寿命进行推理。
- 这意味着如果另一个函数或线程在不知情的情况下决定改变您的静态状态,则代码可能会被破坏。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。