Performance 从实体框架调用存储过程n次

Performance 从实体框架调用存储过程n次,performance,stored-procedures,entity-framework-4,Performance,Stored Procedures,Entity Framework 4,我在一个数据库上有一个存储的proc,我需要在实体框架中多次调用它 public Points GetResults(Share share, DateTime startDate, DateTime endDate) { using (var ctx = new MyDatabaseEntities()) { int? stockId = GetID(share, endDate); var dat

我在一个数据库上有一个存储的proc,我需要在实体框架中多次调用它

    public Points GetResults(Share share, DateTime startDate, DateTime endDate)
    {
        using (var ctx = new MyDatabaseEntities())
        {
            int? stockId = GetID(share, endDate);
            var data = ctx.GetData(stockId, 123, startDate, endDate, -23, 14, 3);
            var selectedPoints = data.Where(a => a.Date.HasValue && a.Value.HasValue).ToDictionary(a => a.Date.Value, a => a.Value.Value);
            return new Points(selectedPoints);
        }
    }

我必须为n股(500股,500股)打电话。我发现目前这对我来说是一个性能瓶颈。存储的进程中有很多逻辑,我无法将其移出进程。有没有人有什么建议可以加快这一进程?或者我只是因为需要多次调用此过程而出错?

如果存储过程只需要一个StockId,而您需要多个StockId的结果,那么您别无选择,只能调用它500次,这总是很慢的


实际上,您需要考虑修改SP,我建议根据使用的数据库引擎查看表值参数。

如果存储过程只需要一个StockId,并且您需要多个StockId的结果,那么您别无选择,只能调用它500次,这总是很慢的


实际上,您需要考虑修改SP,我建议根据使用的数据库引擎查看表值参数。

您使用的是什么数据库和版本?您使用的是什么数据库和版本?我想这正是我要做的。我不能编辑进程,但我可以编写自己的sql。说真的,你应该看看sql,它就像超过1000行的动态可怕。哈哈,我一直在那里!您可以考虑编写一个新的存储过程来获取ID集。然后,您可以在其中使用游标迭代调用现有SP,以调用现有SP use INSERT EXEC SP,并在其中插入临时表。然后在末尾选择表的内容。这应该会快得多,因为你没有网络延迟的呼叫来应付。我想这就是我要做的。我不能编辑进程,但我可以编写自己的sql。说真的,你应该看看sql,它就像超过1000行的动态可怕。哈哈,我一直在那里!您可以考虑编写一个新的存储过程来获取ID集。然后,您可以在其中使用游标迭代调用现有SP,以调用现有SP use INSERT EXEC SP,并在其中插入临时表。然后在末尾选择表的内容。这应该要快得多,因为您不需要应对呼叫的网络延迟。