gpt4 book ai didi

.net - LINQ 调用存储过程很慢

转载 作者:行者123 更新时间:2023-12-02 12:23:40 24 4
gpt4 key购买 nike

当然,一切都是相对的,但是与使用查询管理器简单地执行相同的 SQL 相比,有很大的区别。

我使用探查器来查看 LINQ 调用存储过程时数据库执行的 SQL 语句。结果在大约 1400 毫秒内返回,如果我复制/粘贴 SQL 并通过查询管理器运行完全相同的 SQL,则在 2 毫秒内返回结果。这让我想知道我是否需要做些什么?这里有人有类似经历吗?

以下是从 LINQ 发送的 SQL:

declare @p26 int
set @p26=0
exec sp_executesql N'EXEC @RETURN_VALUE = [dbo].[TapeInfo_Get] @TapeFlag_IsDigitized = @p0, @TapeFlag_ChosenSingleTape = @p1, @TapeFlag_ChosenHierarchy = @p2, @TapeFlag_ChosenForced = @p3, @TapeFlag_ExcludedHierarchy = @p4, @TapeFlag_ExcludedARKBNR = @p5, @TapeFlag_ExcludedForced = @p6, @TapeFlag_ExcludedFilmRoll = @p7, @TapeFlag_ExcludedDVCPRO = @p8, @TapeFlag_ExcludedVHS = @p9, @TapeFlag_ExcludedType = @p10, @TapeFlag_NoticeBNR = @p11, @TapeFlag_NoticeMultiplePNR = @p12, @TapeFlag_NoticeType = @p13, @ProductionFlag_ExcudedDate = @p14, @ProductionFlag_NoticeMultipleTape = @p15, @ProductionFlag_NoticeFilm1C = @p16, @ProductionFlag_NoticeFilmBetaDigial = @p17, @ProductionFlag_ExcludedForeignProd = @p18, @Query = @p19, @PageIndex = @p20, @PageSize = @p21, @ReturnCount = @p22',N'@p0 bit,@p1 bit,@p2 bit,@p3 bit,@p4 bit,@p5 bit,@p6 bit,@p7 bit,@p8 bit,@p9 bit,@p10 bit,@p11 bit,@p12 bit,@p13 bit,@p14 bit,@p15 bit,@p16 bit,@p17 bit,@p18 bit,@p19 varchar(8000),@p20 int,@p21 int,@p22 bit,@RETURN_VALUE int output',@p0=0,@p1=1,@p2=1,@p3=1,@p4=0,@p5=0,@p6=0,@p7=0,@p8=0,@p9=0,@p10=0,@p11=0,@p12=0,@p13=0,@p14=0,@p15=0,@p16=0,@p17=0,@p18=0,@p19=NULL,@p20=0,@p21=10,@p22=0,@RETURN_VALUE=@p26 output
select @p26

.Net C# 代码很简单:

using( BRSDataContext dc = new BRSDataContext() )
{
dc.TapeInfo_Get(false, false, false, false, false, false, false, false, false, false, false, null, true, null, false, null, null, null, false, query, startRowIndex, count, false)
}

我有什么遗漏的吗?有什么想法可以如此显着地影响性能吗?数据库 (MSSQL 2008) 和托管执行 LINQ 的 asp.net 站点的 Web 服务器位于同一网络上,并且都运行 Windows Server 2008 std 32 位。

感谢您的帮助。

解决方案:

SET ARITHABORT ON;

所以这不是 LINQ 问题,而更像是一般的 SQL Server 问题。

最佳答案

将 arithabort 设置为开启;只是为了测试它。有几种推荐的方法可以解决此问题。一是在存储过程中添加“with recompile”。但我通常通过不直接使用输入参数来修复它

例如:

create stored procedure foo( @ParamUserId int)
as
declare @UserId int
set @UserId = @ParamUserId

select * from Users where UserId = @UserId

或者类似的东西。

这是一篇关于此事的好文章 http://www.simple-talk.com/sql/t-sql-programming/parameter-sniffing/

关于.net - LINQ 调用存储过程很慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5553967/

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