gpt4 book ai didi

c# - 使用 Entity Framework 6 的初始负载和性能问题

转载 作者:太空宇宙 更新时间:2023-11-03 12:51:33 24 4
gpt4 key购买 nike

我在我的应用程序中使用 Entity Framework 6,采用数据库优先方法。我在上下文的构造函数中添加了一个日志记录方法:

Database.Log = sql=>Debug.WriteLine(sql);

似乎在新上下文的每个实例中,都会加载表的结构和数据。这导致了性能问题,并且主页界面的加载需要几秒钟。

所以我需要知道:

  1. 这是 Entity Framework 6 的默认行为吗:当我实例化上下文时,模型中的所有表和 View 都将加载到内存中(结构和数据)?
  2. 如果是这样,我如何通过仅加载表的结构来更改它,当我像这样 context.Thetable 调用时将加载数据?
  3. 如果无法更改此默认行为,DbcontextSingleton 的实现是否是解决此问题的好方法?

编辑

这是我的代码:我有一个控制台应用程序,我在其中添加了我的 EF 模型

 class Program
{
static void Main(string[] args)
{
Action empBasicAction ;
Console.WriteLine("Début de programme");

Console.WriteLine("Chargement de context1 ......");
empBasicAction = () => {
Entities contexte = new Entities();
};
Console.WriteLine("fin de chargement1, temps = " + CalculateTime(empBasicAction));

Console.WriteLine("Chargement de context2 ......");
empBasicAction = () => {
Entities contexte = new Entities();
};
Console.WriteLine("fin de chargement2, temps = " + CalculateTime(empBasicAction));


Console.WriteLine("Chargement de context3 ......");
empBasicAction = () =>
{
Entities contexte = new Entities();
};

Console.WriteLine("fin de chargement3, temps = " + CalculateTime(empBasicAction));


Console.WriteLine("Sélection sur une table ......");
empBasicAction = () =>
{
Entities contexte1 = new Entities();
contexte1.fsign_fiche_signaletique.Count();
};

Console.WriteLine("fin de sélection, temps = " + CalculateTime(empBasicAction));

Console.WriteLine("Sélection2 sur une table ......");
empBasicAction = () =>
{
Entities contexte1 = new Entities();
contexte1.fsign_fiche_signaletique.Count();
};

Console.WriteLine("fin de sélection2, temps = " + CalculateTime(empBasicAction));

Console.ReadLine();


}

public static long CalculateTime(Action t)
{
Stopwatch alarme = new Stopwatch();
alarme.Start();
t();
alarme.Stop();
return alarme.ElapsedMilliseconds;

}
}

控制台输出

 Début de programme
Chargement de context1 ......
fin de chargement1, temps = 434
Chargement de context2 ......
fin de chargement2, temps = 0
Chargement de context3 ......
fin de chargement3, temps = 0
Sélection sur une table ......
fin de sélection, temps = 4265
Sélection2 sur une table ......
fin de sélection2, temps = 19

输出

Opened connection at 12/02/2016 12:26:49 +01:00

SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[fsign_fiche_signaletique] AS [Extent1]
) AS [GroupBy1]


-- Executing at 12/02/2016 12:26:52 +01:00

-- Completed in 10 ms with result: SqlDataReader



Closed connection at 12/02/2016 12:26:52 +01:00

Opened connection at 12/02/2016 12:26:52 +01:00

SELECT
[GroupBy1].[A1] AS [C1]
FROM ( SELECT
COUNT(1) AS [A1]
FROM [dbo].[fsign_fiche_signaletique] AS [Extent1]
) AS [GroupBy1]


-- Executing at 12/02/2016 12:26:52 +01:00

-- Completed in 5 ms with result: SqlDataReader



Closed connection at 12/02/2016 12:26:52 +01:00

The program '[4316] ConsoleApplication1.vshost.exe' has exited with code -1073741510 (0xc000013a).

谢谢,

最佳答案

It seems that in each instanciation of new context, the structures and datas of the tables are loaded.

错误

1: FALSE,这是你,指示它拉取数据。

2: 1 是错误的,所以,可能听起来没有帮助,但请按此方式编码。

3:你的假设是错误的,所以这不需要回答。

为了让 SO(堆栈溢出)有所帮助并且您认为它是如此...我建议您发布代码...这样我们可以帮助指出为什么它很慢。

但是我已经回答了你的问题;-)

更新

为什么不

class Program
{
static void Main(string[] args)
{
Entities context = new Entities();

Stopwatch alarme = new Stopwatch();
alarme.Start();

var fSignFicheSignaletiqueCount = context.fsign_fiche_signaletique.Count();

alarme.Stop();
return alarme.ElapsedMilliseconds;
}
}

关于c# - 使用 Entity Framework 6 的初始负载和性能问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35358774/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com