【发布时间】:2012-12-27 08:51:21
【问题描述】:
可能重复:
Random number generator only generating one random number
class System.Random .. why not static?
我有一个名为 RandomGenerator 的公共静态类,它只有一个值 public static random = new Random();
这就是它的样子
public static class RandomGenerator
{
public static Random random = new Random();
}
我必须这样做,因为当我的代码访问随机数时,它会生成太多重复副本(我相信这与 Random 在内存中的位置有关)
上面的代码效果很好!我的代码每次调用时都会生成一个真正的随机值。我的问题是为什么随机不是 C# 语言的内置静态函数?是因为以这种方式访问某些东西会导致性能下降吗?我编写代码的方式是否存在明显的性能问题?
【问题讨论】:
-
离题:似乎每隔一段时间有人遇到他们不理解的设计决策并询问 SO,“性能”是他们最好的猜测。 为什么?
-
更具体地说,每次调用它都会返回一个
Random的实例。要获取随机值,您无需创建新实例。只需调用Next方法之一 -
@delnan,可能是因为它是代码启动时唯一明显的问题......即静态方法/属性测试起来非常痛苦(因此可能导致性能问题)这一事实很难预期,而每个人都看到程序很慢......
-
@AlexeiLevenkov 但这不仅仅是关于
static或任何其他单一问题。它无处不在。每个人都在做这样的 API,我也应该这样做吗?当然,性能上存在重要差异。 -- 为什么 C++ 需要分号?是为了表演吗? ——为什么圆是圆的?它对性能有帮助吗? -
@delnan 那是不必要的。事实上,正如我在问题中解释的那样,我确实了解为什么我想做这样的事情背后的设计方面。我不明白为什么在 C# 中没有一个类为我做这件事,我推测这可能是因为它导致了某种类型的性能问题。我现在知道情况并非如此,这要归功于 SO 更有帮助的成员。感谢您完全没有建设性的评论,它已被标记。
标签: c# oop class random static