Asp.net mvc LINQtoSQL在压力测试时抛出异常

Asp.net mvc LINQtoSQL在压力测试时抛出异常,asp.net-mvc,performance,linq-to-sql,Asp.net Mvc,Performance,Linq To Sql,我有一个运行ASP.NETMVC1.0和LINQ2SQL的web应用程序 我注意到一个非常奇怪的问题,LINQ2SQL在一定的负载下抛出异常(主要是指定的强制转换无效或序列包含多个元素) 更大的问题是,我不是在说真正的沉重/专业的压力测试。。。基本上我所做的就是打开FireFox和Chrome,每次按住F5键10秒(我称之为“可怜的人压力测试”)——瞧;web应用程序在接下来的两三分钟内随机抛出这些异常。如果我从IIS7重新启动应用程序(或者在visualstudio下重新启动WebDev),那

我有一个运行ASP.NETMVC1.0和LINQ2SQL的web应用程序

我注意到一个非常奇怪的问题,LINQ2SQL在一定的负载下抛出异常(主要是指定的强制转换无效或序列包含多个元素)

更大的问题是,我不是在说真正的沉重/专业的压力测试。。。基本上我所做的就是打开FireFox和Chrome,每次按住F5键10秒(我称之为“可怜的人压力测试”)——瞧;web应用程序在接下来的两三分钟内随机抛出这些异常。如果我从IIS7重新启动应用程序(或者在visualstudio下重新启动WebDev),那么一切都会立即恢复正常。好像什么都没发生

起初,我怀疑我处理DataContext的方式,也许我应该在Global.asx的每个应用程序端处理它,但这并没有改变任何事情

现在,所有请求都使用一个公共静态DataContext对象。我不会处理它或重新创建它。这样做对吗?我应该把它处理掉吗?我应该什么时候处理它

在每个请求中都会发生一些事情-例如,在每个页面中,从数据库加载用户对象(对于当前用户),并将“LastSeen”属性更新为DateTime.Now。其他东西(比如标签云)也会被缓存


您知道为什么会发生这种情况吗?

您应该在每次查询之后处理datacontext,并像以前一样使用它

using(MyDataContext dc = new MyDataContext())
{
    var x = dc.Table.Single(a=>a.Id=3);
    //do some more related stuff, but make sure your connection won't be open too long
}
不要让每个请求都使用一个静态datacontext。您会在普通ADO.Net中为每个请求使用相同的连接对象吗


另见

到目前为止,DataContext不是线程安全的 据我所知

你会失去孤立感和 无法控制何时启动SubmitChanges() 调用-并发请求将 互相干涉

记忆 泄漏的可能性很大


DataContext类不是线程安全的-您需要为每个操作创建一个新类。请参阅Rick Strahl的这篇文章()

为Rob建议的每个操作创建DC,或者使用IoC容器为每个请求共享DC


请勿弃置DC-它们设计为轻量级。处置不仅是不必要的,而且可能会导致不良做法,甚至可能导致将来更难追踪的其他线程问题。

您到底遇到了哪些异常?你介意把它们包括在你的问题中吗?这可能会帮助人们理解问题所在……谢谢!我现在正在为每一个工作单元创建一个DC,它工作得完美无缺。这就是它的设计方式。msdn页面甚至使用了术语“工作单元”-