2011年1月 的存档
2011一月27

简单验证码

1,生成图片类:
using System;
using System.Configuration;
using Share.Data;
using System.Data.SqlClient;
using System.Text;
using System.Data;
using Share.Utility;
using System.IO;
using System.Drawing;
using System.Drawing.Imaging;
namespace Web.Class.Constant
{
    /// <summary>
    /// Summary description for HelpConstant.
    /// </summary>
    public class VerifyCode : System.Web.UI.Page
    {
        private static string codenum;
        public static string CodeNum
        {
            get { return codenum; }
            set { codenum = value; }
        }
        public static string strRandom(int Ia, int Ib)
        {
            Random rd = new Random(unchecked((int)DateTime.Now.Ticks));
            object i = rd.Next(Ia, Ib);
            return i.ToString();
        }
        public static byte[] GetCode(int Ia, int Ib)
        {
            CodeNum = strRandom(Ia,Ib);
            Bitmap bm = new Bitmap(50, 15, System.Drawing.Imaging.PixelFormat.Format32bppArgb);
            Font f = new Font("Lucida Sans Unicode", 9, FontStyle.Bold);
            Graphics g = Graphics.FromImage(bm);
            Rectangle newRect = new Rectangle(0, 0, 50, 16);
            g.FillRectangle(new SolidBrush(Color.WhiteSmoke), newRect);
            g.DrawString(codenum, f, new SolidBrush(Color.Red), 1, -1);
            MemoryStream mStream = new MemoryStream();
            bm.Save(mStream, ImageFormat.Gif);
            g.Dispose();
            bm.Dispose();

            return mStream != null?mStream.ToArray():null;

        }

    }
}

2,输出:
        Response.ClearContent();
        Response.ContentType = "image/GIF";
        Response.BinaryWrite(VerifyCode.GetCode(10000, 99999));
        Response.End();
3,前台引用:
4,前台录入的与VerifyCode.CodeNum比较即可
2011一月20

删除损性能,以替换方法取之

数组:0 1 2 3 4 5
取数据:
方法1:取出一个删除一个,但删除很费时,性能并不高
方法2:取出一个,用数组最后一位填充,相当于将最后一位前移,同时将最后一排除在下次取数据之外即可。
&lt;a href="http://www.cnblogs.com/eaglet/archive/2011/01/17/1937083.html"&gt;不重复随机数列生成算法&lt;/a&gt;

新方法:

下面的时间复杂度很小
public static int[] GetRandomSequence2(int total)

{

int[] sequence = new int[total];

int[] output = new int[total];

for (int i = 0; i &amp;lt; total; i++)

{

sequence[i] = i;

}

Random random = new Random();

int end = total - 1;

for (int i = 0; i &amp;lt; total; i++)

{

int num = random.Next(0, end + 1);

output[i] = sequence[num];

sequence[num] = sequence[end];

end--;&nbsp; //缩小范围,将最后一位前移,并排除最后一位。

}

return output;

}

老方法:时间复杂度为n2
public static int[] GetRandomSequence0(int total)

{

int[] hashtable = new int[total];

int[] output = new int[total];

Random random = new Random();

for (int i = 0; i &amp;lt; total; i++)

{

int num = random.Next(0, total);

while (hashtable[num] &amp;gt; 0)

{

num = random.Next(0, total);

}

output[i] = num;

hashtable[num] = 1;

}

return output;

}
2011一月11

数据分区

sql server 评论关闭
1,分区作用:将数据分放到多个物理磁盘上,利用并行,多个磁盘同时吞吐以提升IO能力,同时每个分区数据量小,也减少了数据的扫描,提升了命中速度。实际上表逻辑上并未拆分,只是分散存储于不同的物理文件上,相当于把一张表大数据无限极细化到多张表上,多个驱动上,但是访问时却还是一样的访问,因为本身并未新建任何表。
注:即使放到一块磁盘上,因每个分区数据量小,扫描范围减少,也能提高速度。
表分区方法:1,按时间分区:好处,查询速度快。坏处:因当前数据一直写到一块分区上,故写不快。
                       2,HASH分区:数据均匀的分散到各分区,好处:因当前数据写到不同分区,故写快。但在查询方面,要联合多个分区,故查询不快。
注:分区分为硬件与软件分区,此页是软件分区。硬件分区指用磁盘阵列的方式分区,硬件负责将数据将到不同磁盘上,查询与写入速度都会提高。
操作:指定数据要分区的位置-创建文件组及对应文件, 数据以何种规则适移到分区上-创建分区函数, 进行数据迁移。

操作:指定数据要分区的位置-创建文件组及对应文件, 数据以何种规则适移到分区上-创建分区函数, 进行数据迁移。
步骤:
/*1,指定数据存放位置:增加文件组,并指定文件存放位置*/
ALTER DATABASE BRM_LVJIAN
ADD FILEGROUP [gf_bdorder_50]
ALTER DATABASE BRM_LVJIAN
ADD FILEGROUP [gf_bdorder_100]
ALTER DATABASE BRM_LVJIAN
ADD FILEGROUP [gf_bdorder_150]

ALTER DATABASE BRM_LVJIAN
ADD FILE ( NAME = N'gf_bdorder_50',
FILENAME = N'g:\Mssql_Filegroup\bdorder_50.ndf' , SIZE = 300MB , FILEGROWTH = 10% )
TO FILEGROUP [gf_bdorder_50]

ALTER DATABASE BRM_LVJIAN
ADD FILE ( NAME = N'gf_bdorder_100',
FILENAME = N'I:\Mssql_Filegroup\bdorder_100.ndf' , SIZE = 300MB , FILEGROWTH = 10% )
TO FILEGROUP [gf_bdorder_100]

ALTER DATABASE BRM_LVJIAN
ADD FILE ( NAME = N'gf_bdorder_150',
FILENAME = N'I:\Mssql_Filegroup\bdorder_150.ndf' , SIZE = 300MB , FILEGROWTH = 10% )
TO FILEGROUP [gf_bdorder_150]

/*2,指定数据如何存放:创建分区函数*/

--LEFT,RIGHT指定"="是在最左边还是右边
--LEFT: &lt;=1, 1&lt;10&lt;=20, &gt;20
--RIGHT: &lt;1,1&lt;=10&lt;20, &gt;=20
CREATE PARTITION FUNCTION [partitionFunc_bdOrder] (int)
AS RANGE LEFT FOR VALUES ('500000','1000000')

select max(id) from bdorder

/*3,数据的迁移,应用分区位置与函数,为了方便,将二者合二唯一,提出分区架构的概念*/
CREATE PARTITION SCHEME [partitionScheme_bdOrder]
AS PARTITION [partitionFunc_bdOrder]
TO ([PRIMARY],gf_bdorder_50,gf_bdorder_100,gf_bdorder_150)

--数据迁移到分区
ALTER TABLE dbo.bdOrder DROP CONSTRAINT PK_BDOrder
ALTER TABLE  dbo.bdOrder add CONSTRAINT PK_BDOrder PRIMARY KEY CLUSTERED (ID)
ON [partitionScheme_bdOrder](ID)

--恢复成原来的默认状态,因原来的分区架构是<span style="color: #ff0000;">PRIMARY</span>,故修改表即可,如下:
ALTER TABLE dbo.bdorder DROP CONSTRAINT PK_BDOrder
ALTER TABLE  dbo.bdorder add CONSTRAINT PK_BDOrder PRIMARY KEY CLUSTERED (ID)
ON [PRIMARY]

/*查询*/
--分区
SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('dbo.bdOrder')

--数据所在分区
SELECT  $PARTITION.[partitionFunc_bdOrder](1000000)

SELECT top 20 id,orderno,orderdate,$PARTITION.[partitionFunc_bdOrder](id)  FROM bdOrder
ORDER BY newid()

--数据分布

SELECT $PARTITION.partitionFunc_bdOrder(id) AS Partition_num,
MIN(Id) AS Min_value,MAX(Id) AS Max_value,COUNT(1) AS Record_num
FROM dbo.[bdorder]
GROUP BY $PARTITION.partitionFunc_bdOrder(id)
ORDER BY $PARTITION.partitionFunc_bdOrder(id)

select * from
sys.partition_range_values

/*若数据量增大,需要增加分区,扩大范围,操作如下*/
操作方法:增加分区,增加范围

ALTER DATABASE [D] ADD FILEGROUP [GF2]
ALTER DATABASE [WSBOOK] ADD FILE ( NAME = N'GF2', FILENAME = N'E:\E\E1\DGF2.ndf' , SIZE = 5MB , FILEGROWTH = 10% )
TO FILEGROUP [GF2]

为架构添加范围
ALTER PARTITION SCHEME [D_PARTITION_SHEME]
NEXT USED GF2
这句话就是让下一个分区使用和现在已经存在的分区GF2分区中,

2.添加一个范围
ALTER PARTITION FUNCTION [D_PARTITIONFUNC]()
SPLIT RANGE ('700000')

可以合并一个范围,其实就是<span style="color: #ff0000;">删除分区</span>,如MERGE RANGE(要删除的原分区界点)

ALTER PARTITION FUNCTION [D_PARTITIONFUNC]() MERGE RANGE ('400000')
3.查询分区分布

SELECT * FROM SYS.PARTITIONS WHERE OBJECT_ID = OBJECT_ID('dbo.B')

4.删除分区
DROP PARTITION SCHEME [D_PARTITION_SHEME]
DROP PARTITION FUNCTION [D_PARTITIONFUNC]
2011一月11

查询速度提升

sql server 评论关闭

制约查询速度的有两方面,一是找到,二是取出,分别对应的是扫描数据与IO吞吐,扫描数据的提升通过建立合适的索引解决,而提升IO可以考虑将大表进行分区,分到多个物理磁盘上,通过并行方式提升IO能力。

2011一月4

网站访问速度调节

IIS 评论关闭

网站访问速度由:WEB服务器、网站程序及数据库、服务器带宽及性能决定。
1,WEB服务器设置:
gzip压缩
1) 打开Internet信息服务(IIS)管理器,右击”网站”->”属性”,选择”服务”。在”HTTP压缩”框中选中”压缩应用程序文件”和”压缩静态文件”,按需要设置”临时目录”和”临时目录的最大限制”;

2) 在Internet信息服务(IIS)管理器,右击”Web服务扩展”->”增加一个新的Web服务扩展…”,在”新建Web服务扩展”框中输 入扩展名”HTTP Compression”,添加”要求的文件”为C:\WINDOWS\system32\inetsrv\gzip.dll,其中Windows系统目 录根据安装可能有所不同,选中”设置扩展状态为允许”;

3) 使用文本编辑器打开C:\Windows\System32\inetsrv\MetaBase.xml(建议先备份),找到Location =”/LM/W3SVC/Filters/Compression/gzip用于设置gzip压缩,Location =”/LM/W3SVC/Filters/Compression/deflate”用于设置deflate压缩.设置的属性相同.在HcFileExtensions中增加您需要压缩的静态文件后缀名,如xml、css等; HcDynamicCompressionLevel和HcOnDemandCompLevel表示需要的压缩率,数字越小压缩率越低,这两个属性值一般推荐设置为9, 具有最佳性价比.

4) 编辑完毕后保存MetaBase.xml文件;如果文件无法保存,则可能IIS正在使用该文件。打开”开始”->”管理工具”->”服务”,停止”IIS Admin Service”后,即可保存;

5) 最后,重新启动IIS。可以到http://www.port80software.com/tools/compresscheck.asp?url=nxgao.com验证结果。

gzip说明:
HTTP压缩是在Web服务器和浏览器间传输压缩文本内容的方法。HTTP压缩采用通用的压缩算法如gzip等压缩HTML、JavaScript或 CSS文件。压缩的最大好处就是降低了网络传输的数据量,从而提高客户端浏览器的访问速度。当然,同时也会增加一点点服务器的负担。Gzip是比较常见的一种HTTP压缩算法。
  HTTP压缩工作原理
  Web服务器处理HTTP压缩的工作原理如下:
  1.Web服务器接收到浏览器的HTTP请求后,检查浏览器是否支持HTTP压缩;
  在用户浏览器发送请求的HTTP头中,  带有”Accept-Encoding: gzip, deflate”参数则表明支持gzip和deflate两种压缩算法.
  2.如果浏览器支持HTTP压缩,Web服务器检查请求文件的后缀名;
  静态文件和动态文件后缀启动要所都需要在MetaBase.xml中设置.
  静态文件需要设置: HcFileExtensions Metabase Property (单击跳转到MSDN说明)
  动态文件需要设置: HcScriptFileExtensions Metabase Property (单击跳转到MSDN说明)
  3.如果请求文件是HTML、CSS等静态文件并且文件后缀启用了压缩,则Web服务器到压缩缓冲目录中检查是否已经存在请求文件的最新压缩文件;
  4.如果请求文件的压缩文件不存在,Web服务器向浏览器返回未压缩的请求文件,并在压缩缓冲目录中存放请求文件的压缩文件;
  5.如果请求文件的最新压缩文件已经存在,则直接返回请求文件的压缩文件;
6.如果请求文件是ASPX等动态文件并且文件后缀启用了压缩,Web服务器动态压缩内容并返回浏览器,压缩内容不存放到压缩缓存目录中。

2,网站程序及数据库:
1)文件压缩,js,css等。
2)代码调优
3)数据库sql优化

3,服务器带宽及性能

2011一月1

下拉框显示树形数据

好的代码 评论关闭

主要是用organid字段 ,在数据表中表示好树形结构。
1,数据形式:
category organid
保健家居用品类 01
内衣 0101
其他 0102
保健器械类 02
丰胸美乳 0201
减肥瘦身 0202
身体保健 0203
其他 0204
保健食品类 03
品牌 0301
贝力美 030101
高颗丽挺 030102
零点1号 030103
零点2号 030104

2,取数据:
SELECT STUFF(a.Category,1,0,REPLICATE(‘-’,LEN(a.OrganID)-2))
FROM mdCategory a(NOLOCK)
ORDER BY a.OrganID

效果:
保健家居用品类
–内衣
–其他
保健器械类
–丰胸美乳
–减肥瘦身
–身体保健
–其他
保健食品类
–品牌
—-贝力美
—-高颗丽挺