gpt4 book ai didi

c# - 从 WCF 服务返回大型集合的推荐方法是什么?

转载 作者:行者123 更新时间:2023-11-30 20:38:05 27 4
gpt4 key购买 nike

在我的应用程序中,我希望从 WCF 服务(作为 Windows 服务托管)返回对象集合,以填充 WPF 应用程序中的 DataGrid。集合中对象的数量从一个到数百个不等,具体取决于调用的方法。

我很好奇处理从服务返回大量集合的“最佳”方法是什么。

这些是我看到的建议选项:

  • 增加最大消息大小并一次性返回所有对象。这似乎是一个坏主意,因为有时我可能需要返回超过 2GB 的数据。
  • 对记录进行分页并重复调用该方法,直到检索到所有对象。我见过针对 ASP.NET 项目建议的这一方案,但我不知道它对于桌面应用程序的效果如何。
  • 使用流。老实说,我不明白这是如何工作的,因为它似乎是为了传输大型单个对象而不是许多较小的对象。
  • 使用 yield 关键字执行某些操作,但这超出了我的理解范围,无法理解。 :-/

完成这项任务的最佳方法是什么?为什么?

最佳答案

Increasing the max message size and returning all the objects in one go. This seems like a bad idea because there could possibly come a time when I need to return more than 2GB of data.

这绝对不是一个好的选择,除非您确定您的数据永远不会超过您设置的新限制。否则你只会把问题推回去,几个月后又再次出现。顺便说一下,2Gb 已经很多了(想想你的用户会等多久)

Paginating the records and calling the method repeatedly until all objects have been retrieved. I've seen this one suggested for ASP.NET projects but I don't know how well it would work for desktop apps.

最常见和最明显的方法是,您可以使用分页并仅查询每个页面上定义数量的元素。我不明白你关于“桌面应用程序”的问题?这里的相关概念是客户端/服务器。您的客户端(桌面应用程序)需要向服务器查询要显示的页面内容(如果您使用分页)。如果您的客户端是网页,则该概念仍然相关。

Using a stream. To be honest, I don't understand how this works since it appears to be meant for transferring large single objects rather than many smaller ones.

我猜您读过诸如“管理您自己的流”之类的内容。简而言之,您可以将任何流视为比特流,并在客户端按照您的意愿解释它。我当然不会建议这样做,除非您确实有特定的传输问题(并且有大量要传输的对象肯定不够具体)。有一些非常大的对象要传输可能足够具体,但即使在这里,我也会在采用这种方式之前挑战实现。

Doing something with the yield keyword, but this went over my head and I couldn't follow it. :-/

抱歉,我不明白你的意思,但yield只是语法糖,所以我认为它与解决你的问题无关。仍然看一下以理解这个概念: What is the yield keyword used for in C#?

关于c# - 从 WCF 服务返回大型集合的推荐方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35410686/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com