1、参考<<T-SQL查询>>创建使用数字辅助表,能方便高效地进行查询操作。
(
@n bigint
)
RETURNS TABLE
AS
RETURN
(
with
L0 as ( select 1 as c union all select 1 ),
L1 as ( select 1 as c from L0 as A, L0 as B),
L2 as ( select 1 as c from L1 as A, L1 as B),
L3 as ( select 1 as c from L2 as A, L2 as B),
L4 as ( select 1 as c from L3 as A, L3 as B),
L5 as ( select 1 as c from L4 as A, L4 as B),
Nums as ( select row_number() over ( order by c) as n from L5)
select n from Nums where n <= @n
)
2、应用Linq和Random转换随机序列。
先看一下这个例子:
List < string > randList = new List < string > ();
if (list.Count > 0 )
{
while ( true )
{
Random rand = new Random();
var randomSeq = Enumerable.Repeat( 0 , 100 ).Select(r => rand.Next(list.Count)).Distinct();
foreach (var i in randomSeq)
{
if ( ! randList.Contains(list[i]))
randList.Add(list[i]);
}
if (randList.Count >= list.Count)
break ;
}
}
通过Enumerable.Repeat(0, 100).Select(r => rand.Next(list.Count))方法可以每次产生100个最大不大于list.Count的整形序列,然后通过Distinct()排除掉重复值,避免重复遍历随机索引,因为有了Linq的延迟特性,序列可以保证其随机性,不需要进行这样的操作
Random random = new Random(DateTime.Now.Millisecond);
Thread.Sleep(1);
通过控制Repeat(0, N)中的N值还可以减少偱环的次数,提高性能。
3、使用Row_number()进行数据分页:
if OBJECT_ID ( ' dbo.tb0904 ' ) is not null
drop table dbo.tb0904
create table dbo.tb0904
(
id int identity ( 1 , 1 ) primary key ,
userName nvarchar ( 20 ) not null ,
userPWD nvarchar ( 20 ) not null ,
userEmail nvarchar ( 40 ) null
)
-- 插入数据
set identity_insert tb0904 on
declare @count int ;
set @count = 1 ;
while ( @count <= 2000 )
begin
insert into dbo.tb0904(id,userName,userPWD,userEmail) values ( @count , ' billchen ' , ' 123 ' , ' c@c.net ' );
set @count = @count + 1 ;
end
set identity_insert tb0904 off
-- 使用Row_number()分页
declare @pageIndex int = 10 , @pageSize int = 20 ;
select * from (
select * , ROW_NUMBER() over ( order by id asc ) as IDRank from dbo.tb0904) as ID_RowNumber
where IDRank > @pageSize * @pageIndex and IDRank < @pageSize * ( @pageIndex + 1 )
-- 删除临时表
-- drop table dbo.tb0904
4、如何查看w3wp进程
我们在对网站进行性能调试时经常需要查看Windows任务管理器中的性能查看cpu的占有率,但是在服务器上存在有多个网站时,就会出现多个w3wp.exe进程,或者一个网站设置了多web园后也会出现多个w3wp,其中的不同就是pid,如何知道哪个pid对应哪个网站了,其实很简单,看如下方法:
对于Windows2003服务器可用 iisapp -a
对于Windows2008服务器可用 %windir%/system32/inetsrv/appcmd list wp
5、使用 chkdsk d: 校验磁盘。
6、如何为IIS7定制错误跳转页。
项目中用户头像原来是在aspx页面中读取用户上传的jpg头像进行动态输出的,但是出于性能的问题,现在需要修改为直接显示jpg图片,这样就不需要通过asp.net进行托管,提高一点性能,但是现在的一个问题就是如果用户没有上传头像就会出现404错误,但实际上是要求显示一个默认头像的,所以有必要修改IIS7的定制错误页,让它指定一个aspx页面如"noimg_default.aspx",然后在aspx页面中加载默认的头像进行输出。
protected void Page_Load(object sender, EventArgs e)
{
string url = Request.Url.ToString();
string mime = "image/x-icon";
string fileName = "noimg_default.ico";
if (!url.EndsWith(".ico"))
{
mime = "image/jpg";
fileName = string.Format("noimg_default_{0}.jpg", url.Substring(url.LastIndexOf('/') + 1, 1));
}
Response.ClearHeaders();
Response.AddHeader("Content-Type", mime);
Response.WriteFile(Server.MapPath(fileName));
}
剩下的工作就是如何设置IIS的问题了,对于IIS6就很容易设置,对于IIS7需要注意一个细节就行了。
#Features View --> 404 --> Eidt Custom Error Page --> Execute a URL on this site --> URL --> "/noimg_default.aspx"
#Features View --> 404 --> Edit Pages Settings -->Custom error pages
7、JS获取随机数。
alert(Math.round(Math.random()*10000))
8、永久重定向301。
Response.StatusCode = 301 ;
Response.Status = " 301 Moved Permanently " ;
Response.RedirectLocation = " http://avatar2.profile.csdn.net/1/C/5/1_billok.jpg " ;
Response.End();
9、对高开消资源的释放在高访量的情况之下十分重要,虽然是编程中的一个小问题,但是一旦把它放大了就很明显,所以平时写代码时要时刻注意资源的释放的问题。对于实现了IDisposable接口的类必须使用using或者try{}finally{obj.Dispose();}来释放资源,然后对于实现了Close()、Clear()、Abort()方法的类在使用完毕也要及时释放,以下为一些例子:
#释放资源_例子1
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(url);
request.Timeout = RequestTimeout;
string content = null ;
try
{
// throw new WebException("测试"); // 测试
using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
{
if (response.StatusCode == HttpStatusCode.OK)
{
using (Stream stream = response.GetResponseStream())
{
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
content = reader.ReadToEnd();
reader.Close();
}
stream.Close();
}
}
response.Close();
}
}
catch (System.Net.WebException)
{
// TODO:考虑在此添加超时异常的日志
}
finally
{
if (request != null )
{
request.Abort();
request = null ;
}
}
#释放资源_例子2
{
userName = userName.ToLower();
string x;
using (System.Security.Cryptography.MD5CryptoServiceProvider md5 =
new System.Security.Cryptography.MD5CryptoServiceProvider())
{
byte [] ori = System.Text.Encoding.UTF8.GetBytes(userName);
byte [] buf = md5.ComputeHash(ori);
x = BitConverter.ToString(buf).Replace( " - " , string .Empty);
x = " / " + x[ 0 ] + " / " + x[ 1 ] + " / " + x[ 2 ] + " / " ;
md5.Clear();
}
return x;
}
用于管理资源访问的锁定状态,可实现多线程读取或进行独占式写入访问。它的性能明显优于ReaderWriterLock,可与 lock 语句相当。锁定状态之间的转换已得到简化,从而使编程更容易并减少发生死锁的几率。新类支持递归,可简化从 lock 和 ReaderWriterLock 的迁移。
#线程可以进入三种锁定模式:读取模式、写入模式和可升级的读取模式。
#可升级模式适用于线程通常读取受保护资源的内容,但在某些条件满足时可能需要写入的情况。使用可升级锁可以方便的从读锁中升级为写锁,而不需要进行切换,以增加损耗。
# 平时不要把ReaderWriterLockSlim的实例放到try{}块中,以减少性能损耗。
例如:
{
private static ReaderWriterLockSlim rwLock = new ReaderWriterLockSlim();
private object Get()
{
object obj = null ;
if (rwLock.TryEnterReadLock( 100 ))
{
try
{
// 写操作
obj = new object ();
return obj;
}
finally
{
rwLock.ExitReadLock();
}
}
return null ;
}
private void Add()
{
if (rwLock.TryEnterWriteLock( 100 ))
{
try
{
// 写操作
}
finally
{
rwLock.ExitWriteLock();
}
}
}
public void Update()
{
if (rwLock.TryEnterUpgradeableReadLock( 100 ))
{
try
{
// 读操作
rwLock.EnterWriteLock();
try
{
// 写操作
}
finally
{
rwLock.ExitWriteLock();
}
}
finally
{
rwLock.ExitUpgradeableReadLock();
}
}
}
}
11、Session过期时间的设置。
#Web.config设置:
< sessionState mode ="InProc" timeout ="30" />
</ system.web >
#IIS设置:网站-->属性-->主目录-->配置-->选项-->会话超时