【问题标题】:WCF Data Service : Performance issue while fetching nested entitiesWCF 数据服务:获取嵌套实体时的性能问题
【发布时间】:2013-08-08 16:41:11
【问题描述】:

我的数据库架构:

table : Terminology (ID (PK), Name, Comments)
table : Content (ID (PK), TerminologyID (FK), Data, LangaugeID)

1 - 术语和内容之间的许多关系。一个术语可以根据不同的语言 ID 包含任意数量的内容。

术语和目录表可能有数百万条记录。

现在,即使我使用 WCF 数据服务从客户端获取了数百条记录(分页),但在 5-6 次尝试后,我得到了超时异常。

_DataService.Terminologies.Expand("Contents").Skip(index1).Take(count).ToList();

如果我不展开我的内容,查询工作正常 :),但我不会有内容数据。 处理这种情况的最佳方法是什么。

选项...

  1. 如果我在服务器端使用 Include(我的意思是,编写自定义 webget 方法)而不是在客户端使用 Exapnd,是否有任何性能改进。
  2. 创建数据库视图并通过客户端访问它。
  3. 创建存储过程,我可以在其中传递我的首选 LanguageID 并从客户端调用它。

【问题讨论】:

  • 与任何性能问题一样 - 测量它。看看问题出在哪里。是客户端慢还是服务器慢。如果它在服务器上 - 在哪里?它针对数据库运行什么 SQL,查询计划是什么?查询可能由于某种原因没有使用索引等。

标签: performance wcf-data-services


【解决方案1】:

此 ADO.NET DataServices 是默认生成的向导吗?

无论如何,如果您的客户端可以直接访问数据库,它会快很多,所以如果直接 db 选项可用,那么就使用它。

如果 WCF 是唯一的选择,那么您将不得不创建自己的分页 Web 服务实现,甚至可能使用返回多个记录集的存储过程。

附带说明,我在您的服务查询中看不到 LanguageId,这可能会大大降低速度。

_DataService.Terminologies.Expand("Contents").Skip(index1).Take(count).ToList();

【讨论】:

    最近更新 更多