Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance EF6.1:查询完成和连接关闭之间的延迟_Performance_Entity Framework_Oracle11g_Dotconnect - Fatal编程技术网

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

Performance EF6.1:查询完成和连接关闭之间的延迟,performance,entity-framework,oracle11g,dotconnect,Performance,Entity Framework,Oracle11g,Dotconnect,我们正在为Oracle使用EF6.1和dotConnect 为了调试为什么我们的开发在某个客户服务器上表现不佳,我打开了DatabaseLogger拦截器功能,以在DB中执行查询,并尝试改进它们。我发现,在某些查询中,在执行查询和关闭连接之间有几秒钟的延迟。例如: Connection opened at 17/06/2014 9:47:42 +02:00 SELECT "top". (...) FROM ( SELECT "Project1". (...) FROM

我们正在为Oracle使用EF6.1和dotConnect

为了调试为什么我们的开发在某个客户服务器上表现不佳,我打开了DatabaseLogger拦截器功能,以在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。。。是我之前公开的查询。

运行此查询后,是立即处理DbContext,还是在运行其他进程后处理?这可能是由于阻止了这一操作,导致连接处于打开状态。我添加了一些代码来显示查询是如何生成的。由于这是在MVC控制器中执行的,因此在创建控制器时会创建上下文,并在Dispose方法中处理上下文。在哪个Dispose方法中?您应该将此操作包装在一个using块中,以保证上下文被尽快处理。请翻译一下你问题中的日志:seguramente la mayoría de la gente no lo entiende;已翻译日志:。与使用脚手架模板生成的每个MVC控制器一样,DbContext被声明为类变量,并在创建时实例化:DbEntities db=new DbEntities。然后,当请求完成时,执行控制器的dispose方法,该方法已在类定义中被重写以处理上下文:protected override void Disposebool disposing{db.dispose;base.Disposedisposing;}