EF6.1:查询完成和连接关闭之间的延迟

时间:2014-06-17 08:19:34

标签: performance entity-framework oracle11g dotconnect

我们正在使用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 ...是我之前公开的查询。

0 个答案:

没有答案