C# 实体框架数据读取性能

C# 实体框架数据读取性能,c#,sql-server,networking,entity-framework-6,C#,Sql Server,Networking,Entity Framework 6,我有一个有趣的情况。在Microsoft SQL server Management Studio中对远程SQL server运行查询时,它运行得很快(12秒),但在Entity Framework中使用DbContext.Database.SqlQuery(script)运行相同的查询时,需要48秒 我尝试设置将arithabort设置为on。应用了该设置,但没有改变性能。我无法提供查询执行计划,因为我对SQL server的权限有限。但我可以100%地说,这不是问题所在 考虑这个查询: de

我有一个有趣的情况。在Microsoft SQL server Management Studio中对远程SQL server运行查询时,它运行得很快(12秒),但在Entity Framework中使用
DbContext.Database.SqlQuery(script)
运行相同的查询时,需要48秒

我尝试设置
将arithabort设置为on
。应用了该设置,但没有改变性能。我无法提供查询执行计划,因为我对SQL server的权限有限。但我可以100%地说,这不是问题所在

考虑这个查询:

declare @t table (...)
insert into @t
select <long query>

select top 1 * from @t

此代码在时间方面产生相同的结果

我做了一些研究和实验,似乎向连接字符串添加
数据包大小=32768
(这是最大大小)选项会将速度提高到几乎SSMS的水平。有趣的是,我收到的TCP数据包不会增加它们的大小


我也尝试过其他连接字符串选项,但没有收到任何明显的速度提升。

类似的情况也适用于WAN连接。平均数据包大小没有变化(~1400),但吞吐量从550kBs增加到1800kBs。SSM也有约1800kBs。已使用NetworkTrafficView(NirSoft)。
using (var connection = new SqlConnection(DbContext.Database.Connection.ConnectionString))
using (var cmd = new SqlCommand(script, connection))
{
    connection.Open();

    cmd.CommandType = CommandType.Text;
    using (SqlDataReader reader = cmd.ExecuteReader())
    {
        reader.Read();
        do
        {
        } while (reader.Read());
    }
}