从 WCF 服务返回大型集合的建议方法是什么
本文关键字:方法 是什么 集合 WCF 服务 返回 大型 | 更新日期: 2023-09-27 18:34:35
在我的应用程序中,我希望从 WCF 服务(作为 Windows 服务承载(返回对象的集合,以填充 WPF 应用程序中的 DataGrid。集合中的对象数量范围从 1 到几百,具体取决于调用的方法。
我很好奇,处理从服务返回大型馆藏的"最佳"方法是什么。
这些是我看到的建议选项:
- 增加最大消息大小并一次性返回所有对象。这似乎是一个坏主意,因为有时我可能需要返回超过 2GB 的数据。
- 对记录进行分页并重复调用该方法,直到检索到所有对象。我已经看到这个建议用于 ASP.NET 项目,但我不知道它对桌面应用程序的效果如何。
- 使用流。老实说,我不明白这是如何工作的,因为它似乎是用于传输大型单个对象而不是许多较小的对象。
- 用
yield
关键字做一些事情,但这超出了我的头脑,我无法遵循它。
完成这项任务的最佳方法是什么,为什么?
增加最大消息大小并返回一个对象 去。这似乎是一个坏主意,因为可能会出现一个 我需要返回超过 2GB 数据的时间。
绝对不是好的选择,除非您确定您的数据永远不会超过您设置的新限制。否则,您只会将问题推回去,并在几个月后再次出现。顺便说一下,2Gb已经很多了(想想你的用户会等待多长时间(
对记录进行分页并重复调用该方法,直到所有 已检索对象。我已经看到这个建议 ASP.NET 项目,但我不知道它对桌面应用程序的效果如何。
最常见和最明显的方法是,您可以使用分页,并且只查询每个页面上定义数量的元素。不过,我无法理解您关于"桌面应用程序"的问题?这里的相关概念是客户端/服务器。客户端(桌面应用(需要查询服务器以查找要显示的页面内容(如果使用分页(。如果您的客户端是一个网页,那么这个概念仍然是相关的。
使用流。老实说,我不明白这是如何工作的,因为 它似乎是为了传输大型单个对象,而不是 比许多较小的。
我猜你读过"管理你自己的流"之类的东西。简而言之,您可以将任何流视为位流,并在客户端根据需要对其进行解释。我当然不建议这样做,除非您有非常具体的传输问题(并且要传输的大量对象肯定不够具体(。有一些非常大的对象要传输可能足够具体,但即使在这里,我也会在采用这种方式之前挑战实现。
用 yield 关键字做一些事情,但这超出了我的头脑和 我跟不上了。:-/
对不起,我不在这里关注你,但产量只是语法糖,所以我认为它与解决你的问题无关。还是要看一下这个概念:yield 关键字在 C# 中的用途是什么?