Revert "优化 DbConfigProvider 的并发处理"

This reverts commit 8d07a8cf79.
This commit is contained in:
猿人易 2025-05-28 14:02:28 +08:00
parent 8d07a8cf79
commit bb17b7c160
1 changed files with 27 additions and 60 deletions

View File

@ -26,9 +26,6 @@ public class DbConfigProvider : ConfigProvider
public Int32 Period { get; set; } = 15; public Int32 Period { get; set; } = 15;
private IDictionary<String, Object?>? _cache; private IDictionary<String, Object?>? _cache;
/// <summary>保存操作锁,防止与定时刷新冲突</summary>
private readonly Object _saveLock = new();
#endregion #endregion
#region #region
@ -218,27 +215,14 @@ public class DbConfigProvider : ConfigProvider
/// <summary>保存配置树到数据源</summary> /// <summary>保存配置树到数据源</summary>
public override Boolean SaveAll() public override Boolean SaveAll()
{ {
lock (_saveLock)
{
XTrace.WriteLine("[{0}/{1}]开始保存配置", Category, UserId);
var list = Parameter.FindAllByUserID(UserId, Category); var list = Parameter.FindAllByUserID(UserId, Category);
Save(list, Root, null); Save(list, Root, null);
// 重新加载配置以更新缓存避免被DoRefresh覆盖
var dic = GetAll();
if (dic != null)
{
SaveCache(dic);
XTrace.WriteLine("[{0}/{1}]配置保存完成,已更新缓存", Category, UserId);
}
// 通知绑定对象,配置数据有改变 // 通知绑定对象,配置数据有改变
NotifyChange(); NotifyChange();
return true; return true;
} }
}
void Save(IList<Parameter> list, IConfigSection root, String? prefix) void Save(IList<Parameter> list, IConfigSection root, String? prefix)
{ {
@ -269,9 +253,6 @@ public class DbConfigProvider : ConfigProvider
pi.Save(); pi.Save();
} }
} }
// 确保所有数据库操作完成,避免事务延迟导致的读取不一致
Thread.Sleep(10);
} }
#endregion #endregion
@ -308,15 +289,6 @@ public class DbConfigProvider : ConfigProvider
/// <summary>定时刷新配置</summary> /// <summary>定时刷新配置</summary>
/// <param name="state"></param> /// <param name="state"></param>
protected void DoRefresh(Object state) protected void DoRefresh(Object state)
{
// 使用TryEnter避免在保存操作期间阻塞
if (!Monitor.TryEnter(_saveLock, 100))
{
// 如果无法获取锁,说明正在保存,跳过本次刷新
return;
}
try
{ {
using var showSql = Parameter.Meta.Session.Dal.Session.SetShowSql(false); using var showSql = Parameter.Meta.Session.Dal.Session.SetShowSql(false);
@ -339,7 +311,7 @@ public class DbConfigProvider : ConfigProvider
if (changed.Count > 0) if (changed.Count > 0)
{ {
XTrace.WriteLine("[{0}/{1}]定时检测到配置改变,重新加载如下键:{2}", Category, UserId, changed.ToJson()); XTrace.WriteLine("[{0}/{1}]配置改变,重新加载如下键:{2}", Category, UserId, changed.ToJson());
Root = Build(dic); Root = Build(dic);
@ -349,10 +321,5 @@ public class DbConfigProvider : ConfigProvider
NotifyChange(); NotifyChange();
} }
} }
finally
{
Monitor.Exit(_saveLock);
}
}
#endregion #endregion
} }