0

我正在开发一个 Web 应用程序框架,它使用 MSSQL 进行数据存储,主要只是执行 CRUD 操作(但在任意复杂的结构上),为丰富的 Silverlight 管理员提供 WCF 界面并具有 MVC3 显示(以及一些基本形式,如用户设置等)。

它在以用户友好的方式加载、显示、编辑和保存任何(合理的)复杂数据结构方面变得非常好。

但是,我正在展望未来,并希望扩展我的能力(在此过程中学习新事物也会很有趣......) - 所以我决定(鉴于 C 的未来#5...) 尝试获得一些并行/异步优化...现在,我什至还没有学习 TPL 和 PLinq,所以我也很高兴有任何建议。

所以我的问题是,并行处理可能有帮助的可能领域是什么,TPL 和 Plinq 在哪些方面可以帮助我?

我的直觉告诉我,我可以尝试以并行方式将数据结构的分支保存到数据库(这是我期望最大的性能优化的地方),我可以执行一些复杂的操作(文件上传,邮件发送可能吗?)在多线程环境等中。我可以在客户端上并行构建复杂的 SL UI 视图吗?(在视图上创建 60 个数据绑定字段会导致“闪烁”...)我可以在 MVC 中一次创建部分视图(菜单、类别树、搜索表单等)吗?

ps:如果这变成“告诉我有关并行事物的一切”线程,我很高兴将其设为社区维基......

4

2 回答 2

2

请记住,在任何情况下,asp.net Web 应用程序本质上都是并行应用程序。请求可以并行处理,这都将由 asp.net 框架管理。所以有两种情况:

  1. 您有很多用户同时访问该网站。在这种情况下,服务器的并行处理能力无论如何都可能被用于容量。

  2. 您不会有很多用户同时访问该网站。在这种情况下,服务器可能非常有能力在合适的快速响应时间内处理响应而无需并行处理。

任何时候你开始考虑优化某些东西只是因为它可能很有趣,或者因为你只是认为你应该让东西变得更快,那么你几乎肯定会犯过早的优化。您的努力几乎肯定可以更好地用于丰富框架的功能,而不是使可能足够快的解决方案更快一点(以显着增加复杂性为代价)。

回答 TPL 和 PLINQ 在哪里可以真正提供帮助的问题。在我看来,这些技术的主要优势在于应用程序中确实有很多长时间运行的阻塞进程。例如,如果您有多次调用外部 Web 服务的情况 - 并行进行这些调用可能是一个显着的优势。我强烈质疑写入本地数据库 - 甚至本地网络上不同盒子上的数据库是否会被视为长时间运行的阻塞进程,因为这种并行化具有任何重要价值。

您列出的几乎所有示例都属于让 PC 并行执行之前按顺序执行的操作的类别。您的服务器上有多少 CPU - 当网站处于负载状态时,有多少是真正空闲的。使某些东西并行并不一定等于使其更快,除非当您的 PC 无所事事等待外部事件时,所涉及的过程有一定的时间度量。

于 2011-03-13T12:58:21.733 回答
1

第一个问题是询问用户/测试人员哪些位看起来很慢。确定是什么让你慢下来的唯一方法是使用像 dottrace 这样的分析器。结果有时令人惊讶。

如果你确实找到了一些东西,并行处理可能不是答案。您需要记住,将任务拆分会产生开销,因此如果任务一开始就相当快,它最终可能会变慢。您还必须考虑增加的复杂性,例如如果一半任务成功而一半失败会发生什么?(虽然 TPL 和 PLINQ 将你隐藏在此范围内)

玩得开心,但我想知道这是否是 1)解决方案追逐问题和 2)过早优化的情况。

于 2011-03-13T11:44:37.537 回答