从EntitySpaces加载存储过程所需的时间比从SQL客户端长40倍

时间:2013-07-10 09:32:17

标签: c# .net sql-server entityspaces

我正在开发一个使用EntitySpaces作为ORM的项目。

下面您将看到一个简化的ItemCollection方法,它通过调用存储过程来加载集合:

public partial class ItemCollection : esItemCollection
{
    public bool LoadItemsUsingSomeStoredProcedure(string aLotOfAttributes, out int totalCount)
    {
        // Set a lot of parameters
        esParameters parameters = new esParameters();
        // ...

        bool result = Load(esQueryType.StoredProcedure, "ItemsStoredProcedure", parameters);

        totalCount = (int) paramTotalCount.Value;

        return result;
    }
}

使用SQL Server Profiler我看到这导致了对数据库的调用:

declare @p5 int
set @p5=485
exec [ItemsStoredProcedure] @Param1=4,@Param2=N'41',@Param3=N'SomeValue',@Param4=0,@TotalCount=@p5 output,@Param5=1,@Param6=25
select @p5

完成需要约200秒

但是:当我在SQL Management Studio中运行相同的SQL代码段(本地和远程)时,需要大约4~5秒才能完成。

为什么EntitySpaces调用完成的时间比SQL客户端要长40倍?任何想法如何调试/改进?

PS:替换EntitySpaces在我的WANT列表中很高,但是一如既往地说服客户花一个月的时间来重构“工作”程序真的很难......所以这个选项已经出来了,atm。

1 个答案:

答案 0 :(得分:0)

不要从Visual Studio运行它,这是所有应用程序的已知问题,EntitySpaces几乎没有任何时间添加到SqlClient并实现任何ORM中最快的。

http://www.entityspaces.net/www.entityspaces.net/blog/2010/08/26/The%20EntitySpaces%20ORMBattleNET%20Performance%20Numbers.aspx.html