C# 为每个用户创建不同的静态单例实例
我正在使用ASP.NET MVC开发一个网站,我有很多这样的说明:C# 为每个用户创建不同的静态单例实例,c#,asp.net-mvc,web,static,singleton,C#,Asp.net Mvc,Web,Static,Singleton,我正在使用ASP.NET MVC开发一个网站,我有很多这样的说明: new ReleaseFactory().BuildFeatureSection(); 为了改进我认为使用静态方法的代码: ReleaseFactory.BuildFeatureSection() 问题是我担心会出现僵局 这些方法通常访问不同的数据源(如Excel文档、数据库等),据我所知,通过静态方法访问它们不是一个好主意,尤其是在开发web应用程序时 改进当前语法有什么好主意吗 编辑:有关发布工厂用途的更多信息 Rele
new ReleaseFactory().BuildFeatureSection();
为了改进我认为使用静态方法的代码:
ReleaseFactory.BuildFeatureSection()
问题是我担心会出现僵局
这些方法通常访问不同的数据源(如Excel文档、数据库等),据我所知,通过静态方法访问它们不是一个好主意,尤其是在开发web应用程序时
改进当前语法有什么好主意吗
编辑:有关发布工厂用途的更多信息
ReleaseFactory是一个用于为发布页面创建ViewModels的类。显示的数据并非基于登录的用户,而是每个人的数据相同。在我的网站上,还有其他工厂有一个构造函数,通常只需要一个参数
例如:{baseUrl}/Feature/{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
语句中的代码
您最好尝试一下,如果您有工具,可以对代码进行一些负载测试,看看有什么中断。“改进代码”-如何?你想解决什么问题?在我看来,您似乎是在添加问题,而不是解决问题。
ThreadStaticAttribute
如果每个用户都有单独的问题thread@DmitryBychenko在ASP.NET应用程序中,“线程”几乎从来都不是“用户”的同义词。你的问题是正确的,但这个标题肯定让我很反感。@dcastro-这就是他说的原因“如果每个用户都有单独的线程”