我正在使用Azure存储表和RIA服务来创建一个相当基本的Silverlight UI,以访问和管理一些数据。
没什么花哨的:带有一些注释和DomainDataSource
的数据模型使这一切变得轻而易举。
除了一个小小的例外。
当我有一个非常大的表时,至少在我在Development Fabric上甚至甚至使用LoadSize
的DomainDataSource
参数进行加载时,都需要花费很多时间。
我的猜测是发生了以下事情:
Silverlight客户端向RIA服务请求表的前100行。
由于Azure数据存储查询非常基础,因此该服务从数据存储中检索所有行,然后在该集合上执行Take(100)。
客户获得前100行。
这样做可以节省带宽,但是当您认为必须为基于Azure的应用程序使用的处理能力付费时,这并不是最佳选择。
有什么方法可以优化RIA服务查询?在Azure存储表上甚至可以使用Take()
和Skip()
方法吗?
编辑:我正在使用WCF RIA Services SP1 Beta,并且已经在带有RIA服务的Silverlight上关注了几个教程(它们都非常相似)。将两者结合起来,我只是想知道是否可以通过添加LoadSize
参数来改善将大表加载到Silverlight中的方法。目前,它似乎仅节省带宽(因为将正确的行数发送到Silverlight客户端),但是整个过程仍然使用与整个表一样多的CPU时间。
最佳答案
您是否尝试过RIA Services SP1 Beta?它包括TableDomainService,它通过管理指定Azure存储帐户中的实体来处理所有逻辑。另外,您可以使用Fiddler检查服务与Azure存储之间的流量,以找出问题所在。
参考文献:
WCF RIA服务SP1 Beta announcement
凯尔·麦克莱伦(Kyle McClellan)的blog-他是开发TableDomainService的人。他的博客中有很多关于此功能的文章。
编辑:
如注释中下面提到的Kyle McClellan所述,此问题确实存在于WCF RIA Services SP1 Beta中。
关于c# - 优化RIA服务的Azure存储查询,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5140505/