我正在开发一个Web应用程序框架,它使用MSSQL进行数据存储,主要是做CRUD操作(但是在任意复杂的结构上),为丰富的Silverlight管理员提供WCF接口并具有MVC3显示(以及一些基本的)表单,如用户设置等)。
能够以用户友好的方式加载,显示,编辑和保存任何(合理的)复杂数据结构,相当不错。
但是,我正在展望未来,并希望扩展我的能力(沿途学习新事物会很有趣......) - 所以我决定(根据什么是来到C#5 ...)试图获得一些并行/异步优化......现在,我还没有学过TPL和PLinq,所以我很高兴在那里有任何建议。
所以我的问题是,并行处理可能有哪些帮助,TPL和PLinq在哪些方面对我有帮助?
我的胆量告诉我,我可以尝试以与数据库并行的方式保存数据结构的分支(这是我期望最大的性能优化),我可以执行一些复杂的操作(文件上传,邮件发送)也许?)在多线程环境等中。我可以在客户端上并行构建复杂的SL UI视图吗? (在视图上创建60个数据绑定字段可能导致“闪烁”...)我可以一次在MVC中创建部分视图(菜单,类别树,搜索表单等)吗?
ps:如果这变成了“告诉我关于并行东西的一切”主题,我很高兴将它变成社区维基...
答案 0 :(得分:2)
请记住,在任何情况下,asp.net Web应用程序本质上都是并行应用程序。请求可以并行处理,这将全部由asp.net框架管理。所以有两种情况:
您有很多用户同时访问该网站。在这种情况下,服务器的并行处理能力可能在任何情况下都用于容量。
您没有很多用户同时访问该网站。在这种情况下,服务器可能能够在适当的快速响应时间内处理响应而无需并行处理。
任何时候你开始考虑优化某些东西只是因为它可能很有趣,或者因为你认为你应该更快地制作东西,那么你几乎肯定会对过早的优化感到内疚。您的努力几乎可以肯定更好地用于丰富框架的功能,而不是以更快的速度制作可能足够快的解决方案(以显着增加的复杂性为代价)。
回答TPL和PLINQ在哪里可以提供帮助的问题。在我看来,这些技术的主要优势在于应用程序中您确实拥有大量长时间运行的阻塞进程。例如,如果您有多次呼叫外部Web服务的情况 - 并行进行这些调用可能是一个重要的优势。我强烈质疑写入本地数据库 - 或者甚至是本地网络上不同盒子上的数据库是否会被视为长期运行的阻塞过程,以至于这种并行化具有任何重要价值。
您列出的几乎所有示例都属于让PC与以前按顺序执行并行操作的类别。您的服务器上有多少CPU - 当网站负载时,有多少CPU真正免费。做一些并行并不一定等同于让它更快,除非所涉及的过程有一定的时间,当你的PC坐在那里等待外部事件时什么也不做。
答案 1 :(得分:1)
第一个问题是询问用户/测试人员哪些位看起来很慢。唯一可以确定减慢速度的方法是使用像dottrace这样的分析器。结果有时令人惊讶。
如果你找到了什么,并行处理可能不是答案。你需要记住,将任务拆分有一个开销,所以如果任务一开始就相当快,那么最终可能会变慢。您还必须考虑增加的复杂性,例如:如果半个任务成功,一半失败,会发生什么? (尽管TPL和PLINQ会将您从此隐藏起来)
玩得开心,但我想知道这是否是1)解决问题的解决方案,以及2)过早优化。