WCF OData 性能改进

本文关键字:性能 OData WCF | 更新日期: 2023-09-27 18:30:52

我有以下查询,这需要很多时间 -

var allEmployees = (from e in context.Employees.Expand("Payroll/Customer")
.Expand("HR")
.Expand("Payroll1")                                                 
where e.IsActive
&& e.Payroll.EmployeeId== this.CurrentEmployee.EmployeeId
orderby e.Name
select e).ToArray();

问题-

  1. 如何提高性能?
  2. 查询的哪一部分花费了太多时间,它可以是 Expand 子句,其中,排序,选择。
  3. 最后,我将结果转换为数组。它会影响性能吗?
  4. 我还有其他选择吗,如Parallel.For,PLINQ等。我不确定。

请建议

WCF OData 性能改进

最重要的部分是你的 展开

不,不可能使用并行 LINQ 对 WCF 数据服务进行 LINQ 。

最好的方法是索引客户与人力资源和工资单表之间关系的外键

ToArray 不会花费太长时间

使用 SQL 探查器和 SQL 执行计划来提高性能并找到瓶颈

考虑在服务层上创建方法,并使用选择方法仅返回所需的列

另一个最佳做法是使用 JSON 格式,而不是使用 XML 序列化程序。它会将您的响应大小减少多达 70%。

如果您想了解更多信息,请告诉我。

祝你好运

我知道

这个问题几年前就被问过了,但是如果我的建议可以帮助某人,那么它们就在这里:

  1. 如何提高性能? - 为您经常搜索或排序的列添加索引。索引对列进行排序,而不是优化查询。可以在数据库 https://learn.microsoft.com/en-us/sql/relational-databases/indexes/create-nonclustered-indexes 中执行此操作,也可以在使用 EF Core https://learn.microsoft.com/en-us/ef/core/modeling/indexes 时执行此操作。因此,您可以在"员工"中添加"名称"和"活动"的索引。
  2. SQL 联接 (.展开)可能会降低您的表现,如果可能的话,您应该避免它们。为此,您可以拼平表以避免一二多/多二多关系
  3. 我还建议使用 Visual Studio 中的性能探查器(调试 -> 性能探查器)进行调试。您可以启动它并查询数据库,它将显示包含所有查询的输出文档。然后你可以通过MSSQL Management Studio检查这个查询(当然,如果你使用的是MSSQL)。为此,您需要启用实时查询统计信息并查看哪个指令花费的时间最长。