我们正在使用EF6.1和dotConnect for Oracle。
尝试调试我们的开发在客户服务器之一中表现不佳的原因,我打开了DatabaseLogger Interceptor功能,以便在DB中执行查询并尝试改进它们。我发现的一件事是,在某些查询中,查询执行和连接已关闭之间存在秒的延迟。例如:
Connection opened at 17/06/2014 9:47:42 +02:00
SELECT
"top". (...)
FROM ( SELECT
"Project1". (...)
FROM ( SELECT
"Extent1". (...)
"Extent2". (...)
FROM (...)
WHERE (...)
) "Project1"
ORDER BY (...)
) "top"
WHERE ROWNUM <= 1
-- p__linq__0: '589' (Type = Int32, IsNullable = false)
-- Executing in 17/06/2014 9:47:43 +02:00
-- Completed in 288 ms with result: aj
Connection closed at 17/06/2014 9:47:51 +02:00
正如您所看到的,有几秒钟的延迟。此查询多次运行,但延迟不会出现在每个实例中,其他只有2或3秒的延迟,而其他只是没有。
我真的不知道从哪里开始调查。它与EF或dotConnect Oracle有关吗?执行查询并关闭连接后,完成了什么工作?
编辑:这是我用来从DB中检索信息的代码:
var users = db.USUARIO
.Where(x => x.COORDENADA.Any(c => c.LATITUD != 0 && c.LONGITUD != 0))
.OrderBy(x => x.NOMBRE).AsQueryable();
(...)
var list = users.ToList()
.Select(x => new
{
Usuario = x,
LastCoord = db.COORDENADA
.Include(c => c.TIPO)
.Where(c => c.USUARIOID == x.USUARIOID && c.LATITUD != 0 && c.LONGITUD != 0)
.OrderByDescending(c => c.FECHAHORAPDA)
.ThenBy(c => c.TIPO.RUTA).FirstOrDefault()
})
.Select(x => new ListItem
{
ID = x.LastCoord.COORDENADAID,
Marcadores = new List<COORDENADA>(new[] { x.LastCoord }),
Principal = x.Usuario.NOMBRE.ToTitleCase(),
Inferior1 = x.LastCoord.FECHAHORAPDA.ToString("dd/MM HH:mm"),
Color = x.LastCoord.TIPO.COLOR
});
db.COORDENADA ...是我之前公开的查询。