第二种方法是收集数据,并使用计时器每隔1秒插入许多数据。
第一种方法太慢,但第二种方法更好更快,与数据库的连接数更少。
这是我开发的代码的一部分:
_timer.Stop();
System.Threading.Monitor.Enter(_lockObject);
try
{
Task t1 = Task.FromResult(0);
Task t2 = Task.FromResult(0);
Task t3 = Task.FromResult(0);
if (Data1.Count > 0)
{
t1 = Collection1.InsertManyAsync(Data1);
}
if (Data2.Count > 0)
{
t2 = Collection2.InsertManyAsync(Data2);
}
if (Data3.Count > 0)
{
t3 = Collection3.InsertManyAsync(Data3);
}
Task.WhenAll(t1, t2, t3);
}
catch (Exception)
{
}
finally
{
Data1.Clear();
Data2.Clear();
Data3.Clear();
System.Threading.Monitor.Exit(_lockObject);
_timer.Start();
}
我的问题是,如果我想收集请求并将其作为包含1000个项目的列表插入,我如何才能在不丢失实时数据的情况下做到这一点。我知道在插入数据库时需要锁定我的列表,但在那个时候,我将丢失实时数据,因为我的列表被锁定了?