documentdb - .net 查询 sdk 上的大型 return 结果性能缓慢

documentdb - slow performance on large return result on .net query sdk

我正在使用以下代码处理 documentdb

    var ee =client.CreateDocumentQuery<dynamic>(collection.SelfLink, querySpec)

我在执行时遇到性能问题

    ee.ToList();

完成 700 多条记录大约需要 1 分钟多的时间。 (如果return个结果越多,完成动作的时间就越长) 如果我在 Azure Query Explore 上尝试查询,只需几秒钟。

我可以做些什么来优化代码吗?或者无论如何我可以获得 return 结果作为 JSON 字符串。

谢谢。

尝试将 maxItemCount 增加到 -1(最大值),看看这是否会影响性能:

var ee =client.CreateDocumentQuery<dynamic>(collection.SelfLink, querySpec, new FeedOptions { MaxItemCount = -1 })

请注意,这仍然不会像查询浏览器中的 运行 那样快,原因有二:

  1. 查询浏览器 return 获取一页后立即启动。通过指定 ToList(),您将等待所有 return。查询资源管理器默认为 100 而不是 -1,因此它会更快地返回。为了公平比较,增加查询资源管理器案例的每页项目数设置。您可能需要为您的应用程序考虑一种分页方法(具有较小的页面大小)以部分呈现初始页面并使其看起来更高效。

  2. 其他人报告,我个人在跨越 Azure 数据中心边界时,每次往返都经历过较大的延迟。当从同一数据中心的 node.js 服务器调用时,我得到低于 10 毫秒的延迟。在本地使用相同的代码 运行ning 时,最少需要 250 毫秒。我测得的 ping 延迟是 26 毫秒,所以我假设延迟是在数据中心边界添加的,而不是我的网络。您可能需要考虑 运行将您的代码与 DocumentDB 放在同一个数据中心。

至于return作为JSON字符串,这里有2.5个选项:

  1. 您可能想查看 node.js(或 .NET 中的 edge.js 运行ning,这是额外的 1/2)。它是本机 JavaScript 而不是 C#,因此它在概念上更接近 DocumentDB。 DocumentDB 的 .NET API 存在范式 differences/translation。请注意,我在 .NET 中使用了 edge.js 到 运行 node.js。疯狂但它有效。然后您可以使用 DocumentDB node.js 库而不是 DocumentDB .NET 库。这给了你更多的控制权。
  2. 如果您想保持纯粹的 .NET,您可以使用像 RestSharp.
  3. 这样的包直接点击 DocumentDB REST API