我需要创建一个处理大量数据的ASP.Net应用程序,性能非常重要。
使用GridView,RepeatControl,SQLDataSource等ASP.Net控件是个好主意吗?这些元素的设计是否表现良好,或者使用预制和易于使用的元素会失去性能?
哪一种是处理数据的正确方法?创建业务层并使用业务对象填充表单?或直接使用DataTable和DataSet?
请给我一些有助于提升表现的技巧?
答案 0 :(得分:5)
我要提出的最大的建议是首先使用良好的编程实践构建应用程序,然后使用分析器查看应用程序中花费最多时间的内容。如果你开始尝试尽可能快地完成所有事情,那么你将把所有时间浪费在那些并不重要的事情上。另一方面,如果您开始使代码可维护并遵循SOLID原则,您会发现只需更改几段代码就可以轻松实现显着改进。
在性能方面定义目标是非常重要的。页面加载到什么程度“足够快?”努力实现您的性能目标,但是不要过度考虑减少用户每月只执行一次操作10毫秒的时间。
那就是说,你会发现最大的浪费时间是:
以下是一些优化上述项目的一般提示:
要考虑的最后一个小问题是,下一版本的Entity Framework将自动缓存已编译的查询,这将使大多数查询显着加快,而无需您做任何额外的工作。
答案 1 :(得分:3)
就性能而言,最好的办法是使用ASP.NET MVC来避免ViewState生成的页面大小开销。
就其本身而言,MVC不会使你的应用程序具有高性能,但它肯定会比ASP.NET WebForms在挤出最后几毫秒的延迟时提供更多的灵活性。
对于数据交互,您可以使用任意数量的网格控件等(jqGrid,mvcContribGrid,Microsoft MVC Grid ...)但它们在性能方面基本相同。
绝对从您的控制器层创建一个单独的业务层(再次,如果使用MVC)。根据您的风格,您可以在业务层或模型类本身中包含验证。
尽管实体框架是当前MVC应用程序中数据访问的最佳选择,但您应该从“批处理”的角度注意。在批量更新/删除时,EF仍然不是很好。
批量插入应该具有合理的性能,但与XML Bulk Load相比仍然没有。
如果有必要,使用EF,但将其与参数化查询的手动执行结合起来,参数化查询仍然可以使用相同的ObjectContext执行(而不是连接所有普通的ADO.NET东西)......