c#缓存机制,用于大批量连接数据库的性能优化,可减少对数据库的消耗。

本文介绍了如何在C#中利用SqlDependency来优化性能,通过启动缓存机制减少对数据库的频繁连接。当数据库发生变更时,通过dependency_OnChange事件自动更新缓存数据,确保数据的实时性。但这种方法仅适用于单表查询,不支持多表联合查询。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

public void FrmReceive_Load(object sender, EventArgs e)//初始化加载
        {
            SqlDependency.Start(_connectionString);
            ModuleId = DBOperation.GetMouduleId(DbHelper, "废水");
            DataProcessing.ParamList = GetDataList(ModuleId);
          }


 public static List<ParamModel> GetDataList(Guid moduleid)//开始加载数据库缓存
        {
            var list = new List<ParamModel>();
            try
            {
                var sql =
                    $@"select *   from dbo.Param a where a.State = 0  ";
                if (string.IsNullOrEmpty(_connectionString))
                    _connectionString = Xml.Read("SysSet.xml", "ConnectionString").ToString();
                using (var connection = new SqlConnection(_connectionString))
                {
                    using (var command = new SqlCommand(sql, connection))
                    {
                        command.CommandType = CommandType.Text;
                        connection.Open();
                        var dependency = new SqlDependency(command);
                        dependency.OnChange += dependency_OnChange; //检测数据库变动
                        var sdr = command.ExecuteReader();
                        while (sdr.Read())
                        {
                            var model = new ParamModel
                            {
                                ParamId = Guid.Parse(sdr["ParamId"].ToString()),
                                ParamCode = sdr["ParamCode"].ToString(),
                                PollutionType_Id = Guid.Parse(sdr["PollutionType_Id"].ToString())
                            };
                            list.Add(model);
                        }
                        sdr.Close();
                    }
                }
            }
            catch (Exception e)
            {
                LogHelper.LogError(e);
            }
            return list;
        }
        private static void dependency_OnChange(object sender, SqlNotificationEventArgs e)//存在数据库任一变动,重新拉取缓存数据
        {
            var t1 = new Task(LoadCacheData); //task数据拉取。
            t1.Start();
        }
        private static void LoadCacheData()//拉取缓存
        {
            DataProcessing.ParamList = GetDataList(ModuleId);
        }
dependency_OnChange 为自动监测数据库变化引发的数据更新,但是只能针对单表进行监测,所以在该机制的局限下,不支持多表的联合查询。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值