我有以下代码行:
log4net.LogManager.GetLogger("m").Debug(DateTime.Now.ToString("hh:mm:ss.fff") + "Check-1");
设置 setting = session.CreateQuery("from Setting s").UniqueResult< Setting>();
log4net.LogManager.GetLogger("m").Debug(DateTime.Now.ToString("hh:mm:ss.fff") + "Check-2");
上面的代码在不到毫秒的时间内执行(Check-1 和 Check-2 中的时间相同,它以毫秒为单位测量时间,代码中未显示使用的标准)。
但在这种情况下:
IList<票>票= session.CreateQuery("从票").List<票>();
foreach(Ticket t in ticket)
{
t.Dosomething = 5;
log4net.LogManager.GetLogger("m").Debug(DateTime.Now.ToString("hh:mm:ss.fff") + "Check-1"); 设置 setting = session.CreateQuery("from Setting s").UniqueResult< Setting>(); log4net.LogManager.GetLogger("m").Debug(DateTime.Now.ToString("hh:mm:ss.fff") + "Check-2");
}
上面的代码是处理大量数据的巨大处理代码的简化版本,我需要在 foreach 循环中进行另一个查询。forech 循环中的查询在 500 毫秒内执行。票证集合包含 15000 行。
我已经重构了代码(在 foreach 中没有查询),但是我很感兴趣,为什么单独执行相同的查询不需要时间来执行,但是如果在首先加载大量实体之后执行,它会变得如此缓慢?
但是在上面的相同场景中,如果我对第二个查询使用不同的会话,它会立即执行。
当我需要在大量实体的 foreach 循环中执行另一个查询时,有什么建议如何处理这种情况?