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

时间:2016-02-15 13:31:39

标签: c# wcf

在我的应用程序中,我想从WCF服务(托管为Windows服务)返回一组对象,以填充WPF应用程序中的DataGrid。根据所调用的方法,集合中的对象数量范围从一到几百。

我很好奇是处理从服务中返回大型馆藏的“最佳”方式。

这些是我见过的建议:

  • 增加最大邮件大小并一次性返回所有对象。这似乎是一个坏主意,因为有时候我需要返回超过2GB的数据。
  • 重复记录并重复调用该方法,直到检索完所有对象。我已经看到这个建议用于ASP.NET项目,但我不知道它对桌面应用程序的效果如何。
  • 使用流。说实话,我不明白这是如何工作的,因为它似乎是为了传输大型单个物体而不是许多较小的物体。
  • 使用yield关键字做一些事情,但这已经过去了,我无法遵循它。 : - /

处理此任务的最佳方法是什么?为什么?

1 个答案:

答案 0 :(得分:4)

  

增加最大邮件大小并将所有对象返回到一个中   走。这似乎是一个坏主意,因为可能会有一个   我需要返回2GB以上数据的时间。

绝对不是一个好的选择,除非您确定您的数据永远不会超过您设置的新限制。否则你只需将问题推回原处,并在几个月后再次使用。 2Gb已经很多了(想想你的用户会等多久)

  

重复记录并反复调用该方法直至全部   已检索到对象。我见过这个建议用于ASP.NET   项目,但我不知道它对桌面应用程序的效果如何。

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

  

使用流。说实话,我不明白这是如何运作的   它似乎是用于转移大型单个物体   比许多小的。

我猜你读的是“管理你自己的流”。简而言之,您可以将任何流视为位流,并在您的客户端根据需要进行解释。我当然不会建议这样做,除非你确实有特定的转移问题(并且有大量的转移对象肯定不够具体)。有一些非常大的传输对象可能是特定的,但即使在这里,我也会以这种方式挑战实现。

  

使用yield关键字做一些事情,但这已经超出了我的想法   我无法遵循它。 : - /

对不起,我不在这里关注你,但产量只是语法糖,所以我不认为这与解决你的问题有关。仍然要看一下这个概念: What is the yield keyword used for in C#?