asp.net-mvc C MVC应用程序中的随机数生成
如果每个请求只需要一个数字,那么在ASP.NET MVC应用程序中生成随机数的正确方法是什么?根据MSDN,为了获得足够质量的随机性,有必要使用创建一次的单个System.Random对象生成多个数字.由于为MVC中的每个请求创建了一个控制器类的新实例,因此我不能使用在控件的构造函数中为Random对象初始化的私有字段.那么我应该在MVC应用程序的哪个部分创建和存储Random对象?目前我将它存储在控制器类的静态字段中,并在使用它的action方法中懒惰地初始化它: public class HomeController : Controller { ... private static Random random; ... public ActionResult Download() { ... if (random == null) random = new Random(); ... } } 由于“随机”字段可以被控制器类的多个实例访问,如果两个实例同时尝试初始化它,它的值是否可能被破坏?还有一个问题:我知道静态的生命周期是应用程序的生命周期,但是对于MVC应用程序,它是什么?它是从IIS启动到IIS关闭吗? 解决方法 理想情况下,您希望将Random类的实例维护的时间长于单个页面的生命周期.不要把它放在静态变量中; Random类不是线程安全的,这将导致问题.从 the docs开始:Any instance members are not guaranteed to be thread safe. 我最喜欢的方法是来自Microsoft ParallelFX团队的RandomGen2包装器类(他们真正知道他们使用线程做什么),它使用每个线程的实例(主要是)无锁和线程安全的随机数. public static class RandomGen2 { private static Random _global = new Random(); [ThreadStatic] private static Random _local; public static int Next() { Random inst = _local; if (inst == null) { int seed; lock (_global) seed = _global.Next(); _local = inst = new Random(seed); } return inst.Next(); } }您可以按以下方式拨打电话: var rand = RandomGen2.Next();您可能需要添加额外的方法来包装您想要访问的其他Random方法,并且我建议使用更好的名称,例如ThreadSafeRandom,但它证明了原理. (编辑:商洛站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 在MVC ActionLink中使用Knockout绑定
- asp.net – Request.Url.AbsoluteUri和重写的URL
- 隐藏ASP.NET菜单项
- ASP.NET拒绝访问该路径
- ASP.NET通过分布式Session提升性能
- asp.net-mvc – 路由是在我的区域中找到控制器,但不是视图
- asp.net-mvc – 使用Asp.net MVC 4中的OutputCacheAttribut
- asp.net – OutOfMemoryException当发送大文件500MB使用Fil
- 如果我的Asp.Net会话有IsNewSession == true,那我的意思是什
- asp.net-mvc – AntiXss保护Html模型属性
- 如何在asp.net c#中计算网站访问者数量
- asp.net – 增加IIS7 / Win7 Pro上的最大上传文件
- 如何合理地构建我的ASP.NET MVC 2项目与区域
- asp.net-mvc-4 – 全局过滤器MVC 4的执行顺序是什
- asp.net – ASPXAUTH cookie未保存
- asp.net-mvc – ASP.NET MVC:处理取消按钮的正确
- 如果我的Asp.Net会话有IsNewSession == true,那我
- asp.net-mvc – ASP.Net MVC:如何根据原始的Jso
- asp.net-mvc – 为什么在ASP.NET MVC中使用lambd
- 何时在ASP.NET上选择LAMP?
- asp.net-core C 如何使用ASP.NET注册OData
- asp.net C MVC4 C ContextDependentView C
- asp.net-mvc-3 C 如何从ASP.NET MVC#输出中
- asp.net-mvc C 使用AD的ASP.NET MVC表单Aut
- asp.net-mvc C ASP.NET MVC中的WebApi [Fro
- asp.net C 适用于多个用户的EWS通知中心
- asp.net-mvc C 已经使用相同的参数类型定义
- ASP.Net C AJAX UpdatePanel中的Javascript
- asp.net-mvc C 未在ELMAH中记录的错误
- asp.net-mvc C MVC应用程序中的随机数生成