如何提高 ASP.Net 应用程序的性能

如何提高 ASP.Net 应用程序的性能
  最近在开发一个专业的网站,在工作完成后对性能进行了一些测试与分析。发现很多值得我们注意的地方。

  系统有三层:Control (UI ) DataProvider (Data) Components (Base)

    后台使用MS Sql Server 2000 ,数据层通过 存储过程来完成所有的数据操作。并编写了一个IDataProvider 接口来定义所有的操作。UI 层只是通过调用IDataProvider 来实现所有的功能。

一开始我们使用的方法:

SqlDataProvider dp = new SqlDataProvider();
dp.Data_registerUser (User user);

   这样就有了一个问题,当一个页面包含大量
控件时,会产生很多的SqlDataProvider 对象,而SqlDataProvider 运行库到项目后期已经非常庞大(已经达到250K左右)。这样在.NET 中已经算80K以上的大对象了。大量创建大对象会非常严重地影响性能。

   那就没有好的方法来解决一下吗?其实,我们不需要创建怎么多对象的。只要有一个SqlDataProvider 对象在内存中就可以了。这样我们想到了 ASP.NET 中的 System.Web.Caching.Cache 类,我们对代码进行了修改。添加了一个类。

//---------------  缓冲 SqlDataProvider.SqlDataProvide ----
public class DataProvider
{
public static IDataProvide Instance()
{

Cache cache = System.Web.HttpContext.Current.Cache;

if ( cache["IDataProviderBase"] == null )
{

String assemblyPath = "SqlDataPrvider.dll"; 
String className = "SqlDataProvider.SqlDataProvide";
assemblyPath = HttpContext.Current.Server.MapPath(HttpContext.Current.Request.ApplicationPath + "/bin/" + assemblyPath);
try
{
cache.Insert( "IDataProvide", Assembly.LoadFrom( assemblyPath).GetType( className ).GetConstructor(new Type[0]), new CacheDependency( assemblyPath ) );
}
catch (Exception)
{
HttpContext.Current.Response.Write("<b>ERROR:</b> Could not locate file: <code>" + assemblyPath + "</code> or could not locate class <code>" + className + "</code> in file.");
HttpContext.Current.Response.End();
}
}
return (IDataProvide)( ((ConstructorInfo)cache["IDataProvide"]).Invoke(null) );
}
}

//--------------修改后的代码------
IDataProvide dp = DataProvider.Instance();
dp.Data_registerUser (User user);

 

   通过改造,系统性能得到很大的提高。但系统还有几个可以进行性能优化的地方。如:常用数据的缓冲,分页数据存储过程等。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值