提高ASPX服务器性能的几大狠招
∆ 第0招依靠测试工具,以下根据ACT test测试结果,整理。【全部招数凶狠度的依据】
所谓性能优化,必须是建立在测试的基础之上的,ACT Test是比较爽的测试工具,比Load Runner方便,比Web Stress直观,支持脚本编程和录制登陆到注销全过程。
所有优化都要进行对比测试,才是评判的数字依据。
所以,个人认为:不做压力测试,优化是可以做,但是没数据支持,是不严谨的。
∆ 第一招生成静态。【凶狠度排名第一:性能RPS提升两个数量级(提高速度百倍)】
以下是截取Response的Stream生成文件的代码
protected override void Render(HtmlTextWriter writer)
{
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
base.Render(htmlTextWriter);
if (本页允许生成静态HTML)
{
//根据aspx的get参数构造出的HTML文件名,如:aaa.aspx?id=1 转化成 aaa_id_1.html
string filePath = Server.MapPath(htmlFileName);
StreamWriter streamWriter = new StreamWriter(filePath , false, Encoding.UTF8);
streamWriter.Write(HTML);
streamWriter.Close();
htmlTextWriter.Close();
}
}
生成后,以后先判断是否有这个文件,如果有就跳过去。
本页允许生成静态HTML,可以在后台做一个钩选和更新,并且在内容发生变化后删除静态HTML。
∆ 第二招,图片文件分流服务器。【凶狠度排名第二:性能RPS提升1个数量级(提高速度十倍)】
1,web 1台或多台。
2,图片1台或多台。
3,文件1台或多台。
4,数据库1台或多台。
不同机房要采用Remoting分发文件是个不错的主义,就是工作量大。
以下是同机房多服务器之间可以通过web读写分发文件的关键代码。
using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.IO;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Security.Principal;
using System.Runtime.InteropServices;
namespace WebApplication1
{
public partial class _Default : System.Web.UI.Page
{
public const int LOGON32_LOGON_INTERACTIVE = 2;
public const int LOGON32_PROVIDER_DEFAULT = 0;
WindowsImpersonationContext impersonationContext;
[DllImport("advapi32.dll", CharSet = CharSet.Auto)]
public static extern int LogonUser(String lpszUserName,
String lpszDomain,
String lpszPassword,
int dwLogonType,
int dwLogonProvider,
ref IntPtr phToken);
[DllImport("advapi32.dll", CharSet = CharSet.Auto, SetLastError = true)]
public extern static int DuplicateToken(IntPtr hToken,
int impersonationLevel,
ref IntPtr hNewToken);
private bool impersonateValidUser(String userName, String domain, String password)
{
IntPtr token = IntPtr.Zero;
IntPtr tokenDuplicate = IntPtr.Zero;
if (LogonUser(userName, domain, password, LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, ref token) != 0)
{
if (DuplicateToken(token, 2, ref tokenDuplicate) != 0)
{
WindowsIdentity tempWindowsIdentity;
tempWindowsIdentity = new WindowsIdentity(tokenDuplicate);
impersonationContext = tempWindowsIdentity.Impersonate();
if (impersonationContext != null)
return true;
else
return false;
}
else
return false;
}
else
return false;
}
private void undoImpersonation()
{
impersonationContext.Undo();//回退为未更改前账户
}
protected void Page_Load(object sender, EventArgs e)
{
//临时更改为 跟 网络硬盘相同用户名密码的账户(此账户必须在网络盘有写入权限)本机也需要同样帐号密码的帐户
if (impersonateValidUser("administrator", "192.168.1.102", "kuqu123456"))
{
Response.Write(System.IO.File.Exists(@"\\192.168.1.102\share\C#高级编程\C#高级编程(第四版).pdf"));
undoImpersonation();
}
else
{
Response.Write("登陆失败");
}
}
}
}
∆ 第三招,各种缓存。【凶狠度排名第三:性能RPS提升1个数量级(提高速度十倍级别)】
缓存代码好找,就不写了,道理不用多讲。
∆ 第四招,减少数据库往返。【凶狠度排名第四:性能RPS提升和往返次数有关】
能一次取的数据,就不要多次,尤其在绑定的行里多次执行存储过程。
∆ 第五招,少用对象。【凶狠度排名第五:性能RPS提升取决于对象数量】
用Static函数执行SQL,绑定数据或者增删查改,来代替 new一堆对象去绑定List或者设置属性。
∆ 第六招,多用Ajax和客户端HTML代码,少用服务器控件,减少刷新和ViewState。【凶狠度排名第六:性能RPS提升取决于具体界面功能】
道理不用多讲,服务器控件垃圾比较多。
∆ 第七招,采用好的数据结构容器和算法。。【凶狠度排名第七:性能提升取决于算法复杂度,普通Web开发这种情况不多见,但是特殊开发要重视!~~】
哈希类性能最好,查找复杂度是O(1),例如:Dictionnary <T,T>,
二叉树查找复杂度是O(Log n),排序O(n*Log n),List和ArraList自带的排序速度是接近(n*Log n),
数组类的线性查找O(n),如果你用冒泡排序O(n*n),那么你不是优秀程序员。
StringBuilder 性能好于 string+=,不过提升的有限,不是本质的数量级别的提升。
其他招数,欢迎补充排名。
网站分类
站点统计
- 文章总数:11184
- 评论总数:151
- 引用总数:8
- 浏览总数:47422
- 留言总数:379
- 当前主题:Default主题
- 当前样式:MsnSpace
网站语录
最新评论及回复
文章归档
- 2011 September (3)
- 2010 May (267)
- 2010 March (168)
- 2010 February (29)
- 2010 January (540)
- 2009 December (276)
- 2009 October (279)
- 2009 September (224)
- 2009 August (356)
- 2009 July (207)
- 2009 June (305)
- 2009 May (658)
- 2009 April (692)
- 2009 March (1050)
- 2009 February (1392)
- 2009 January (759)
- 2008 December (1124)
- 2008 November (1945)
- 2008 August (4)
- 2008 July (5)
- 2008 June (23)
- 2008 May (21)
- 2008 February (29)
- 2008 January (108)
- 2007 December (35)
- 2007 November (5)
- 2007 October (22)
- 2007 September (134)
- 2007 August (349)
- 2007 July (156)
- 2007 June (18)
- 2007 January (1)
- 相关文章:
如何防止邮件服务器被滥用 (2008-2-17 21:51:20)
用server2003建立小型邮件服务器 (2008-2-17 21:40:6)
用Apache架设Web服务器 (2008-2-13 19:30:44)
华中科技大学图像所FTP服务器,资源丰富 (2008-1-6 23:12:59)
MySQL服务器默认安装之后如何调节性能 (2007-9-8 22:56:28)
Linux下的FTP服务器配置 (2007-9-6 0:50:12)
31 个用来测试你网站各项性能的免费在线工具 (2007-7-3 9:45:12)
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。