为每个用户创建不同的静态单例实例
本文关键字:静态 单例 实例 用户 创建 | 更新日期: 2023-09-27 18:17:30
我正在使用ASP开发一个网站。NET MVC,我有很多这样的指令:
new ReleaseFactory().BuildFeatureSection();
为了改进代码,我想使用静态方法:
ReleaseFactory.BuildFeatureSection()
问题是我害怕发生死锁的可能性。
这些方法经常访问不同的数据源(如Excel文档,数据库等),据我所知,通过静态方法访问它们不是一个好主意,特别是在开发web应用程序时。
有改进当前语法的好主意吗?
编辑:关于发布工厂目的的更多信息。
ReleaseFactory是一个用于为发布页面创建ViewModels的类。显示的数据不是基于登录的用户,但对每个人都是一样的。在我的网站上,有其他工厂的构造函数通常只需要一个参数。
。: {baseUrl}/功能/{ID}
public ActionResult BetaProgram(int id)
{
var viewModel = new FeatureFactory(id).BuildFeatureViewModel();
return View(viewModel);
}
同样,在这种情况下,显示的信息不是基于用户,而是基于当前页面的id。
没有看到你的代码,我最好的建议是使用锁,例如
public static class Foo
{
private static object lockingObject = new object();
public static void DoSomething()
{
lock (lockingObject)
{
// Do your stuff.
}
}
}
这是一个简单的例子,可能对你来说足够了,我不确定。基本上,您每次将对lock
语句内运行的代码的访问阻塞到一个线程。这可以消除死锁,因为一次只有一个线程可以执行lock
语句中的代码。
你最好尝试一下,如果你有工具的话,对代码做一些负载测试,看看哪里出了问题。