gpt4 book ai didi

c# - Entity Framework 启动在每个人的计算机上都很慢,但我的

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

我们最近开始使用C#开发应用程序,并决定尝试使用代码优先方法来处理持久性的Entity Framework 6.1.3。数据存储在本地服务器上运行的SQL Server Express 2012实例中。该应用程序仍然很小。当前,我们仅保留两个POCO,并且在数据库中有两个表:一个具有5个字段(大约10行数据),另一个具有4个字段(2行)。

当Entity Framework处理第一个查询时,我们遇到3秒钟的延迟,随后的查询很快。经过一番搜索,我们发现这对于Entity Framework是正常的,因此,尽管对于如此小的数据库而言,这似乎有些多余,但我们一直在努力应对。

在今天做了一些工作之后,突然发现我只用了四分之一秒的时间来运行第一个查询。我看不到所做更改的任何明显内容,因此我将它们上传到源代码管理,并要求我的同事下载所有内容。当他在计算机上构建并运行它时,第一次查询仍然需要3秒。我已经编译了该应用程序,并在两台测试计算机上进行了尝试,但它们遇到了最初的3秒延迟。

问题与计算机/操作系统之间似乎没有关联。我的计算机正在运行Windows 7 SP1 x64。我同事的开发计算机正在运行Windows 10 x64。其他两台测试计算机正在运行Windows 7 SP1 x86。它们都是相似的规格(Core i5,4GB / 8GB RAM)。

在对延迟的研究中,我发现您可以采取多种措施来提高性能(预生成视图等),而我却没有做任何事情。我没有安装任何软件或对系统进行任何更改,尽管我认为可能在后台安装了更新。在数据库服务器,数据库本身或POCO中,没有任何更改。我们都连接到同一服务器上的同一数据库。

这就提出了一些明显相关的问题。如果有可能在四分之一秒内启动,为什么到现在为止要花3秒钟?我的计算机突然发生了什么事情,从而突然提高了性能,又如何在仍然很慢的其他计算机上复制该性能?

任何人都可以提供任何建议吗?

编辑

我打开了登录Entity Framework的功能,以查看正在运行的查询以及查询所花的时间。在第一个(出于测试目的)仅运行查询之前,EF会运行3个查询来进行迁移。生成的用于检索我的数据的查询如下,如下所示:

SELECT 
[Extent1].[AccountStatusId] AS [AccountStatusId],
[Extent1].[Name] AS [Name],
[Extent1].[Description] AS [Description],
[Extent1].[SortOrder] AS [SortOrder]
FROM [dbo].[AccountStatus] AS [Extent1]
-- Executing at 28/01/2016 20:55:16 +00:00
-- Completed in 0 ms with result: SqlDataReader


如您所见,它运行非常快,考虑到该表中只有2条记录,这不足为奇。这3个迁移查询和我的查询总共需要不超过5毫秒才能在我的计算机和我的同事的计算机上运行。

将该查询复制到SSMS并从其他各种计算机运行该查询会产生相同的结果。速度如此之快,它不需要花费时间。当然,看起来查询不会引起延迟。

编辑2:诊断工具的屏幕截图

为了进行良好的比较,我更改了代码,以使查询在应用程序启动时运行。我添加了一个红色箭头来指示表单出现的位置。我以前没有注意到,但是当我的同事在启动Visual Studio之后第一次运行该应用程序时,速度大约要快一秒钟。随后的所有时间都较慢。

1)同事的计算机-加载Visual Studio后首次运行

Colleague's computer - first run after loading Visual Studio

2)同事的计算机-所有后续运行

Colleague's computer - all subsequent runs

3)我的电脑-所有运行

My computer - all runs

因此,每当我的同事运行该应用程序时(除了第一次),除了通常的延迟之外,还有一秒钟的暂停。启动Visual Studio之后立即进行的第一次运行似乎消除了这一秒钟的暂停,但仍远远不能达到我计算机的速度。

顺便说一句,应用程序启动会导致大约四分之一秒的正常延迟。如果我更改应用程序以要求对第一个查询单击按钮,则仅在单击按钮后才发生第二个暂停和通常2秒的延迟。

值得注意的另一件事是应用程序使用的内存量。大多数时候,在我的计算机上,它将使用大约40MB,但是在另一台计算机上,它似乎从未使用超过35MB。会不会正在进行某种内存优化,这会减慢另一台计算机的运行速度?也许我的计算机正在将一些其他信息/缓存信息加载到其他人必须生成的内存中。如果可能的话,我可能会在哪里寻找任何想法?

编辑3

我一直在推迟对模型和数据库进行更改,因为我担心延迟会再次出现,并且我没有任何可测试的对象。只是想补充一下,在用尽所有其他可能性之后,我尝试修改POCO和数据库,它在我的计算机上仍然运行很快,而在其他计算机上运行缓慢。

我已更改此问题的标题,以更准确地反映我要解决的问题。

最佳答案

SQL Server中的查询计划可能会随时间变化。可能是您的计算机缓存了一个好的查询计划,而您的同事计算机却没有。换句话说,它可能与EF无关。您可以通过在Management Studio中手动运行相同的查询来确认或否认这一理论。

关于c# - Entity Framework 启动在每个人的计算机上都很慢,但我的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35069627/

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