0

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

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子句,where,orderby,select。
  3. 最后我将结果转换为数组。会影响性能吗?
  4. 我是否还有其他选择,例如 Parallel.For、PLINQ 等。我不确定。

请建议

4

2 回答 2

0

最重要的部分是您的展开

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

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

ToArray 不会花费太长时间

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

考虑在您的服务层上创建方法并使用 Select 方法仅返回您需要的列

另一个最佳实践是使用 JSON 格式而不是使用 XML Serializer。它会将您的响应大小减少多达 70%。

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

祝你好运

于 2013-09-11T10:52:33.920 回答
0

我知道几年前有人问过这个问题,但如果我的建议可以帮助某人,他们是:

  1. 我怎样才能提高性能?- 为您经常搜索或排序的列添加索引。索引正在对您的列进行排序以优化查询。您可以在数据库https://docs.microsoft.com/en-us/sql/relational-databases/indexes/create-nonclustered-indexes中执行此操作,或者如果您使用的是 EF Core https://docs.microsoft.com /en-us/ef/core/modeling/indexes。因此,您可以在Employees 中为Name 和IsActive 添加索引。
  2. SQL 连接 (.Expand) 会降低您的性能,您应该尽可能避免使用它们。您可以通过展平表格来避免一对多/多对多关系
  3. 我还建议使用 Visual Studio 中的性能探查器进行调试(调试 -> 性能探查器)。您可以启动它并查询数据库,然后它将向您显示包含所有查询的输出文档。而且您可以通过 MSSQL Management Studio 检查此查询(当然,如果您使用的是 MSSQL)。为此,您需要启用 Live Query Statistics 并查看哪条指令花费的时间最长。
于 2020-09-25T10:13:05.417 回答