You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 03:06:00