文章标签 ‘ASP.NET’
提到ASP.NET性能问题,总是听到很多新手说ASP.NET的性能如何如何不好,只能说这些人并没有深入了解ASP.NET架构,不知道如何做才能提高ASP.NET的性能。 1.尽量少用ASP.NET控件 这个是ASP.NET最具争议的问题,我们知道ASP.NET控件会生成大量的ViewStat,这个其实是ASP.NET的一个特性,这个特性可以大幅度的提高我们的开发速度,只是在性能上会有一定的损失。为什么会这样?我们首先要了解ASP.NET控件原理,当我们访问一个ASP.NET页面的时候,服务器端会将页面上所有的控件中的一些交互属性放到隐藏表单域上,以便当我们回传页面的时候这些属性可以再次使用,大量的属性造成了页面的臃肿,提交数据也会变得异常庞大,这个就是导致ASP.NET控件在性能上的根本原因。 解决办法,就是我们要尽量少用或者不用asp.net控件,放弃回调方法,用请求–>响应的最基本的网页处理流程,于此同时,我们还要禁用页面中的ViewStat和runat=”server”的属性。这个时候,我们在打开页面或提交请求,页面会变的清爽的多。 2.尽可能的使用缓存 对于那些我们经常使用的数据、迭代输出的内容,我们一定要使用缓存,这个也是新手经常不注重的事情,ASP.NET给我们提供了很好的缓存方式,我们可以充分利用这一点,大大提高我们的ASP.NET应用程序的性能。 3.尽量使用存储过程 存储过程是存储在服务器上的一组预编译的SQL语句。存储过程具有对数据库立即访问的功能,信息处理快,使用存储过程可以避免对命令的多次编译,在执行一次后其执行规划就驻留在高速缓存中,以后需要时只需直接调用缓存中的二进制代码即可。另外,存储过程在服务器端运行,独立于ASP.NET程序,便于修改,最重要的是它可以减少数据库操作语句在网络中的传输。 4.不要使用DataSet作为数据源 应用程序的性能90%来源于磁盘I/O操作,提高数据库的读取能力,可以直接提高系统的性能。我们在读取数据的时候,请使用SqlDataReader,返回集合的方式,这样做会比DataSet性能要高很多。 5.服务器跳转 使用Service.Transfer()来跳转,Response.Redirect()方法的跳转,属于客户端跳转,是页面发送给客户端一个跳转请求,客户端再请求要跳转的页面完成跳转操作,Server.Transfer()则是直接的服务器端的跳转。 6.尽可能的少使用代码中的异常 代码中创建异常对象会消耗大量资源,我们要尽量少使用代码中的异常处理。 7.细节方面 细节方面我们也要注意,如我们在处理很多字符串连接操作时,我们应使用StringBuilder,字符串连接不多的时候,使用+=就可以了。判断空字符串时用string.IsNullOrEmpty()方法,比较字符串使用Compare,应用程序的设置信息使用序列化存放成xml文件。
web.config是以xml文件规范存储网站配置信息的载体,这一点跟应用程序配置文件app.config一样. 这个配置文件可以方便为我们存储一些网站配置信息,如网站数据库连接字符串,错误页面等 <configuration> 跟元素,其他节点都在它的内部 跟元素内部包含 <configSections> 配置节处理声明,指定配置节和命名空间的声明。通常,我们要载入第三方框架的时候会用到,如Log4net(日志),DCWeb(Gzip压缩),UrlRewriter(URL重写) 例子: <appSettings> 包含自定义应用程序设置,存储在文件中的任何信息。 例子: <connectionStrings> 为网站指定数据库连接字符串(名称/值对的形式)的集合。 例子: <system.web> 配置网站的行为方式,内部包括了asp.net网站的所有配置信息 子节点包括 <customErrors>错误信息配置 例子: <globalization> 国际化配置节点 <sessionState> 会话状态设置节点 <httpRuntime> http运行时设置
asp.net数据库连接字符串,由于开发环境和部署环境的不同,我们不能写到代码中,通常是写在配置文件中即web.config,下面介绍两种方式 appSettings节点,用来保存自定义程序配置信息,key,value组成 web.config 调用 connectionStrings节点,用来保存连接字符串,name,connectionString组成,有更丰富的配置属性,推荐 web.config 调用
在 web.config 中可以存储数据库连接语句(通常存于 <connectionString>),也可以存储 SQL 语句(通常存于<appSettings>),这样在我们的程序中就可以非常方便地调用,特别是 .NET Framework 2.0 中使用声明式数据绑定,更是需要将这些信息存储在 web.config 中。利用明文存储这些敏感信息是不明智的,这就需要加密。 利用 aspnet_regiis 对 web.config 加密 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727>aspnet_regiis -pef connectionStrin gs E:\wwwroot -prov DataProtectionConfigurationProvider -pef 指定两个参数: 这里 connectionStrings 是要进行加密的配置节,如果配置节不是根元素则就指定路径,如:父配置节/子配置节。 这里 E:\wwwroot 是要加密的配置文件所在的物理目录。 -prov 表示使用哪个驱动来加密,一共有两个驱动可选,在类似于 C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG 的位置,我们可以找到 machine.config 文件,在其 configProtectedData 配置节,我们可以看到这两个驱动的名称,以及默认的驱动是哪一个。这两个驱动是 RsaProtectedConfigurationProvider(类名 RsaProtectedConfigurationProvider)和 DataProtectionConfigurationProvider(类名 DpapiProtectedConfigurationProvider)。 RsaProtectedConfigurationProvider RSA 加密,公钥/私钥均存储在配置文件中,移植方便。 DataProtectionConfigurationProvider 使用 Windows 内置的加密服务,密钥由 LSASS.EXE 管理,无法移植。通过设置可以限定是只能某个帐户可以使用加密的数据,还是 Windows 中所有帐户均可使用。 [...]