提高WCF数据服务中.NET客户端数据上下文性能的技巧?

时间:2012-04-03 17:36:40

标签: wcf-data-services odata wcf-data-services-client

我们一直在使用以下堆栈开发新的应用程序:

SQL Server 2008 R2 - >实体框架4.2 - > WCF数据服务 - > WCF数据服务客户端库

这都是.NET 4.0

现在,WCF数据服务客户端库对于少量数据和简单的模式/对象图非常方便,但它对于更复杂的模型来说是一个真正的好处。特别是,我们发现DataServiceContext.Links集合可以扩展为O(n ^ 2):你加载的对象越多,你的图表嵌套越多,得到的就越慢,直到需要更长的时间。将数据加载到上下文中,而不是从线上读取数据。

例如,我们有一个拥有2000个成员的集合,每个成员有4个导航属性。在不扩展任何导航属性的情况下拉动整个集合大约需要1秒钟。扩展所有4个导航属性需要5秒。我们测量了堆栈中各个点的性能,并且大部分额外时间花在客户端上,整理数据。

我们采用了各种技术来处理大数据集:

  1. 非规范化。这适用于我们始终扩展的图形。如果我们想延迟加载部分图表,那么效果不会很好。
  2. 分别加载相关对象,并在数据上下文之外将它们拼接在一起。这只是令人讨厌,但它确实克服了context.Links问题。
  3. 使用多个数据上下文将Links集合的压力降至最低。
  4. 在连接中使用MergeOption.NoTracking w /(1)& (2)
  5. 有没有人知道其他任何技术?在加载相关对象时,是否存在可能导致不必要开销的设置?

    有时看起来我们正在编写我们自己的自定义上下文的一半,并且在它变得更精细之前我想要一个完整性检查。

    [是的,我意识到WCF数据服务可能是错误的工具。唉,我们已经走了这条路]

0 个答案:

没有答案