ASP.NET多标签并发访问时页面停止处理、数据样式缺失问题求助
解决方案
核心根因
你遇到的并发干扰问题90%以上是代码中使用了**静态变量(static修饰)**存储请求级别的数据(比如示例中的dsParts数据集、dateData日期对象)导致的。ASP.NET中静态变量属于应用全局共享,所有用户的所有请求都会操作同一块内存空间,并发时后发起的请求会覆盖前一个请求正在处理的数据,完全匹配你描述的故障特征。
具体修复步骤
- 先排查页面类和所有公共类的变量定义,把所有static修饰的dsParts、dateData、DisplayError这类请求私有变量全部改为页面类的实例变量,或者直接在OnLoad方法内部声明,确保每个请求拥有独立的变量空间,不会互相覆盖。
- 给数据库相关资源套上using块自动释放,避免连接泄漏挤占连接池资源,修改后的连接代码参考:
// 每个请求单独声明DataSet,不要用静态变量存储 DataSet dsParts = new DataSet(); using (iDB2Connection BlueDB2Connection = new iDB2Connection(strConnectionString)) { using (iDB2Command SqlCmd = BlueDB2Connection.CreateCommand()) { SqlCmd.CommandTimeout = 1000000000; // 按当前页面选择对应查询语句 if (curPage.Contains("amewood")) { SqlCmd.CommandText = sqlMainDataWood(); } else if (curPage.Contains("amesteel")) { SqlCmd.CommandText = sqlMainDataSteel(); } using (iDB2DataAdapter BlueDB2PartsDataAdapter = new iDB2DataAdapter(SqlCmd)) { try { BlueDB2PartsDataAdapter.Fill(dsParts); } catch (SqlException sqlEx) { DisplayError.Text = "Error:" + sqlEx.Message; } } } }
- CSV读取部分如果daysStart.csv不会频繁更新,可以在应用启动时一次性读取内容缓存到内存,每次请求直接用缓存值,既避免并发读文件的冲突,也能提升页面加载速度。如果需要实时读取,建议对文件操作加轻量级的读锁,避免并发读取异常。
- 如果你用了Session存储页面展示数据,确保不同页面的Session键名不一样,不要共用同一个键名存不同页面的报表数据,避免请求互相覆盖Session值。
内容的提问来源于stack exchange,提问作者Jesse
相关产品推荐
相关产品推荐

