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();
问题-
- 如何提高性能?
- 查询的哪一部分花费了太多时间,它可以是 Expand 子句,其中,排序,选择。
- 最后,我将结果转换为数组。它会影响性能吗?
- 我还有其他选择吗,如Parallel.For,PLINQ等。我不确定。
请建议
最重要的部分是你的 展开
不,不可能使用并行 LINQ 对 WCF 数据服务进行 LINQ 。
最好的方法是索引客户与人力资源和工资单表之间关系的外键
ToArray 不会花费太长时间
使用 SQL 探查器和 SQL 执行计划来提高性能并找到瓶颈
考虑在服务层上创建方法,并使用选择方法仅返回所需的列
另一个最佳做法是使用 JSON 格式,而不是使用 XML 序列化程序。它会将您的响应大小减少多达 70%。
如果您想了解更多信息,请告诉我。
祝你好运
我知道
这个问题几年前就被问过了,但是如果我的建议可以帮助某人,那么它们就在这里:
- 如何提高性能? - 为您经常搜索或排序的列添加索引。索引对列进行排序,而不是优化查询。可以在数据库 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 时执行此操作。因此,您可以在"员工"中添加"名称"和"活动"的索引。
- SQL 联接 (.展开)可能会降低您的表现,如果可能的话,您应该避免它们。为此,您可以拼平表以避免一二多/多二多关系
- 我还建议使用 Visual Studio 中的性能探查器(调试 -> 性能探查器)进行调试。您可以启动它并查询数据库,它将显示包含所有查询的输出文档。然后你可以通过MSSQL Management Studio检查这个查询(当然,如果你使用的是MSSQL)。为此,您需要启用实时查询统计信息并查看哪个指令花费的时间最长。