C# 使用实体框架6的初始负载和性能问题
我在应用程序中使用了EntityFramework6和数据库优先的方法。我在上下文的构造函数中添加了一个日志记录方法:C# 使用实体框架6的初始负载和性能问题,c#,.net,performance,entity-framework,memory-management,C#,.net,Performance,Entity Framework,Memory Management,我在应用程序中使用了EntityFramework6和数据库优先的方法。我在上下文的构造函数中添加了一个日志记录方法: Database.Log = sql=>Debug.WriteLine(sql); 似乎在新上下文的每个实例中,都会加载表的结构和数据。这导致了性能问题,主界面的加载需要几秒钟 所以我需要知道: 这是实体框架6的默认行为吗:当我实例化上下文时,模型中的所有表和视图都将加载到内存中(结构和数据) 如果这是真的,我如何通过只加载表的结构来改变这一点,当我像这样调用上下文时,
Database.Log = sql=>Debug.WriteLine(sql);
似乎在新上下文的每个实例中,都会加载表的结构和数据。这导致了性能问题,主界面的加载需要几秒钟
所以我需要知道:
上下文时,数据将被加载
Dbcontext
实现Singleton
是否是解决此问题的好方法 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).
输出
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).
谢谢
似乎在每一个新上下文的实例中,结构和
加载表的数据
FALSE
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;
}
}
在看到您的编辑后:我需要知道应用程序缓慢的原因,所以我进行了这些连续的测试,所以如果您再次拖放代码,您将看到差异result@LamloumiAfif我不明白你最后的评论。我不知道你的主要方法是什么。。。但对我来说,这只是计算信号表中的记录。