gpt4 book ai didi

wcf - mvc3 中使用 WCF 服务获取数据的性能技术

转载 作者:行者123 更新时间:2023-12-03 03:20:56 25 4
gpt4 key购买 nike

我正在使用 asp.net mvc 3 <-> WCF Web 服务 <-> Entity Framework 4 和 Azure Web 角色。这就是问题所在:

我有索引页面,其中以图 block 形式显示用户列表。每个用户与20-30多个群组有关联,可能有数百个。但我只显示每个图 block 2 组。请引用此图。

我在用户组映射表中映射了用户和组带有 userid 和 groupid 的 compisit 键。现在的问题是我在索引页上添加了分页。客户要求列表应该是有状态的。当我 fteching 列表并再次为每个用户获取列表时,看起来像这样

Get Users 
-> For each user
-> Add Div
-> For each User Group
-> Get 2 Associated Groups to this User.
-> Add Lable
-> Add Group Name

由于要求而这样做,列表应该是有状态的。因此,对于每个用户来说,遇到向服务器请求获取其组的请求......在这种架构中确实很耗时。我猜由于使用 EF4,WFC 到 mvc 3 之间的数据事务很慢。我不能严格使用 Jquery.javascript。那么执行此操作的最佳方法应该是什么。一秒钟之内。

enter image description here

最佳答案

(您没有提及系统背后的后端存储;我假设它是 SQL Azure,但无论如何,下面的讨论将几乎相同。)

在调整此类应用程序的性能时,我发现记住两件事很重要:

  • 尽量减少每个请求中的查询数量
  • 让数据库完成繁重的工作

特别是,对 SQL Azure 执行单个 SELECT 查询所需的时间可能几百毫秒。这表明您希望每个 HTTP 请求最多执行 10 - 15 次查询,以获得亚秒级响应时间。

解决此问题的一种方法是确保在尽可能少的数据库查询中查询所需的所有数据。这意味着您要通过 EF 一次性拉回大量数据,但这通常是可以的:在云中,查询执行可能很慢,但数据传输通常很快。

因此,例如,用在服务器上执行单个较大查询的 groupby 替换诸如在客户端上迭代集合之类的操作。

MiniProfiler http://code.google.com/p/mvc-mini-profiler/ 是一个非常有用的工具,可以分析您的应用程序并识别重复的查询。 。

如果这仍然没有帮助,请考虑对数据进行非规范化。有很多方法可以实现这一点:

  • 在服务器上创建一个附加表,当您更改数据时,该表会重新填充:此表以平面方式表示您显示网页时所需的内容
  • 使用 Azure 表存储创建一个表,在更改数据时填充该表:这可能会存储数据的序列化表示形式,然后可以使用 LINQ to XML 在内存中查询或排序该表示形式
  • 在数据库上创建 View (尽管有时查询并没有真正的性能提升)

除了所需的开发时间和存储空间之外,这里最大的权衡是写入速度会变慢,因为非规范化表示需要更新。在这种情况下,使用辅助角色和 Azure 队列异步更新非规范化表示可能是合适的。

关于wcf - mvc3 中使用 WCF 服务获取数据的性能技术,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7850865/

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