C# 提高REST服务的性能

C# 提高REST服务的性能,c#,performance,rest,C#,Performance,Rest,我有一个方法,它在for循环中调用存储过程300次,每次存储过程返回1200条记录。我该如何改进这一点?我无法排除300个电话,但有没有其他方法可以尝试。我正在使用通过ASP.NET实现的REST服务,并使用IBATIS进行数据库连接 我无法排除这300个电话 取消300个呼叫。 即使您所能做的只是添加另一个存储过程,该存储过程调用原始存储过程300次,并聚合结果,您也会看到巨大的性能提升 如果您可以编写一个新的存储过程来复制原始功能,但其结构更适合于您的特定用例,并且只调用一次,那就更好了 即

我有一个方法,它在for循环中调用存储过程300次,每次存储过程返回1200条记录。我该如何改进这一点?我无法排除300个电话,但有没有其他方法可以尝试。我正在使用通过ASP.NET实现的REST服务,并使用IBATIS进行数据库连接

我无法排除这300个电话

取消300个呼叫。

即使您所能做的只是添加另一个存储过程,该存储过程调用原始存储过程300次,并聚合结果,您也会看到巨大的性能提升

如果您可以编写一个新的存储过程来复制原始功能,但其结构更适合于您的特定用例,并且只调用一次,那就更好了

即使代码和数据库在同一个系统上,在代码和数据库之间来回300次也需要时间

一旦这一点可怕的问题得到解决,如果需要的话,您还可以寻求其他优化方法

我无法排除这300个电话

取消300个呼叫。

即使您所能做的只是添加另一个存储过程,该存储过程调用原始存储过程300次,并聚合结果,您也会看到巨大的性能提升

如果您可以编写一个新的存储过程来复制原始功能,但其结构更适合于您的特定用例,并且只调用一次,那就更好了

即使代码和数据库在同一个系统上,在代码和数据库之间来回300次也需要时间

一旦这个可怕的问题得到解决,如果需要的话,你还可以寻求其他优化方法。

测量

测量在服务器端代码中花费的时间量。测量在存储过程中花费的时间量。测量在客户端花费的时间量。计算一下,你就可以粗略估计网络时间和其他开销

返回1200条记录,我认为网络带宽将是主要问题之一;您也许可以研究不同的序列化引擎(具有相同的输出类型)是否有帮助,或者添加压缩(gzip/deflate)支持是否有益(这意味着:减少带宽比增加所需的CPU更重要)

如果您调用REST服务300次,延迟可能很重要;也许你可以稍微并行化,或者少打大电话而不是多打小电话

您可以批处理SQL代码,这样您只需访问数据库几次(每次重复调用SP),这是完全可能的;只需使用
EXEC
etc(仍在使用参数化)

您可以查看如何将数据从ADO.NET获取到REST层。你提到了IBATIS,但你有没有检查过它与“整洁”相比是快还是慢

最后,可以调查SP性能本身;索引或只是重新构造SP的SQL可能会有所帮助。

Measure

测量在服务器端代码中花费的时间量。测量在存储过程中花费的时间量。测量在客户端花费的时间量。计算一下,你就可以粗略估计网络时间和其他开销

返回1200条记录,我认为网络带宽将是主要问题之一;您也许可以研究不同的序列化引擎(具有相同的输出类型)是否有帮助,或者添加压缩(gzip/deflate)支持是否有益(这意味着:减少带宽比增加所需的CPU更重要)

如果您调用REST服务300次,延迟可能很重要;也许你可以稍微并行化,或者少打大电话而不是多打小电话

您可以批处理SQL代码,这样您只需访问数据库几次(每次重复调用SP),这是完全可能的;只需使用
EXEC
etc(仍在使用参数化)

您可以查看如何将数据从ADO.NET获取到REST层。你提到了IBATIS,但你有没有检查过它与“整洁”相比是快还是慢


最后,可以调查SP性能本身;索引或只是重新构造SP的SQL可能会有所帮助。

如果必须返回360000条记录,则必须返回360000条记录。但您真的需要返回360000条记录吗?从那里开始,一路往下走。

如果你必须返回360000条记录,那么你必须返回360000条记录。但您真的需要返回360000条记录吗?从这里开始,一路往下走。

在不了解太多细节的情况下,架构似乎有缺陷。一方面,使用单个S.P.执行将表锁定6秒钟以检索360000条记录被认为是不合理的,但返回一组可能不一致的360000条记录(通过多个S.P.执行检索)也可以。这让我想知道您到底想实现什么,以及是否有更好的方法来设计客户机和服务器之间的集成

例如,如果客户机正在检索自上次请求以来创建的一组记录,则更合适


无论您在做什么,360000条记录都需要在服务器和客户端之间移动大量数据,我们应该查看数据传输的体系结构和目的,以确保当前的方法是合适的。

在不了解太多细节的情况下,该体系结构似乎存在缺陷。一方面,在检索usi的360000条记录时,将表锁定6秒钟被认为是不合理的