为了账号安全,请及时绑定邮箱和手机立即绑定

实体框架异步操作完成需要十倍的时间

实体框架异步操作完成需要十倍的时间

C#
慕妹3242003 2019-11-22 15:52:51
我有一个使用Entity Framework 6处理数据库的MVC站点,并且我一直在尝试对其进行更改,以使所有内容都作为异步控制器运行,并且对数据库的调用作为它们的异步对应对象(例如ToListAsync()而不是ToList())我遇到的问题是,仅将查询更改为异步已使它们的运行速度变得异常慢。下面的代码从我的数据上下文中获取“相册”对象的集合,并将其转换为相当简单的数据库联接:// Get the albumsvar albums = await this.context.Albums    .Where(x => x.Artist.ID == artist.ID)    .ToListAsync();这是创建的SQL:exec sp_executesql N'SELECT [Extent1].[ID] AS [ID], [Extent1].[URL] AS [URL], [Extent1].[ASIN] AS [ASIN], [Extent1].[Title] AS [Title], [Extent1].[ReleaseDate] AS [ReleaseDate], [Extent1].[AccurateDay] AS [AccurateDay], [Extent1].[AccurateMonth] AS [AccurateMonth], [Extent1].[Type] AS [Type], [Extent1].[Tracks] AS [Tracks], [Extent1].[MainCredits] AS [MainCredits], [Extent1].[SupportingCredits] AS [SupportingCredits], [Extent1].[Description] AS [Description], [Extent1].[Image] AS [Image], [Extent1].[HasImage] AS [HasImage], [Extent1].[Created] AS [Created], [Extent1].[Artist_ID] AS [Artist_ID]FROM [dbo].[Albums] AS [Extent1]WHERE [Extent1].[Artist_ID] = @p__linq__0',N'@p__linq__0 int',@p__linq__0=134实际上,这不是一个非常复杂的查询,但是SQL Server运行它几乎需要6秒钟。SQL Server Profiler报告它需要5742毫秒才能完成。如果我将代码更改为:// Get the albumsvar albums = this.context.Albums    .Where(x => x.Artist.ID == artist.ID)    .ToList();然后生成了完全相同的SQL,但是根据SQL Server Profiler,它只需要474毫秒即可运行。该数据库在“相册”表中大约有3500行,实际上不是很多,并且在“ Artist_ID”列上有一个索引,因此应该非常快。我知道异步有开销,但是让事情慢十倍对我来说似乎有点陡峭!我在哪里错了?
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 256 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信