MSPlus WebControls For ASP.NET. (服务器端控件)

Upgrade Develop Efficiency,Surprise For U! - Mack.Z

  博客园 :: 首页 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
  22 随笔 :: 42 文章 :: 905 评论 :: 14 Trackbacks

2005年6月18日 #

     摘要: 昨晚上写了一篇"压缩ASP.NET中的ViewState"的文章,大家都对这种方式是否会带来性能上消耗的问题比较关心.有一点是肯定的,压缩ViewState的减少网络带宽的占用,肯定会对性能有影响.我作了一个小小的测试.先后用同一个页面加密和不加密的情况下,刷新页面观测w3wp.exe的CPU占用情况.此页面的ViewState大小为3.996 Bytes w3wp.exe 以下是每次刷新的时CP... 阅读全文
posted @ 2005-07-28 19:55 Mack.Z 阅读(6232) | 评论 (22)编辑

服务器端控件带来的好外我在这就不多说了,但多过的使用服务器端件保存控件的状态会带来大量的ViewState的情况大家一定遇到过吧.过多的ViewState会很大程度上降低页面的加载速度制成服务器端的性能下降.

以下是结合CSharpZipLib对ViewState进行压缩的方法.

MSPlus.Web.UI.Page 源码:
using System;
using System.Web.UI;
using System.IO;
using ICSharpCode.SharpZipLib.Zip.Compression;

namespace MSPlus.Web.UI
{
    
/// <summary>
    
/// 压缩ViewState By Mack.Z (MSPlus)
    
/// </summary>

    public class Page : System.Web.UI.Page
    
{

        
protected override void SavePageStateToPersistenceMedium(Object pViewState)
        
{
            LosFormatter mFormat 
= new LosFormatter();
            StringWriter mWriter 
= new StringWriter();

            mFormat.Serialize(mWriter, pViewState); 
            String mViewStateStr 
= mWriter.ToString(); 

            
byte[] pBytes = System.Convert.FromBase64String(mViewStateStr);

            pBytes 
= Compress(pBytes); 

            String vStateStr 
= System.Convert.ToBase64String(pBytes); 

            RegisterHiddenField(
"__MSPVSTATE", vStateStr);
        }


        
protected override Object LoadPageStateFromPersistenceMedium()
        
{
            String vState 
= this.Request.Form.Get("__MSPVSTATE");

            
byte[] pBytes = System.Convert.FromBase64String(vState);

            pBytes 
= DeCompress(pBytes);

            LosFormatter mFormat 
= new LosFormatter();

            
return mFormat.Deserialize(System.Convert.ToBase64String(pBytes));
        }



        
public static byte[] Compress(byte[] pBytes) 
        

            MemoryStream mMemory 
= new MemoryStream();

            Deflater mDeflater 
= new Deflater(ICSharpCode.SharpZipLib.Zip.Compression.Deflater.BEST_COMPRESSION);
            ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream mStream 
= new ICSharpCode.SharpZipLib.Zip.Compression.Streams.DeflaterOutputStream(mMemory,mDeflater,131072);

            mStream.Write(pBytes,
0,pBytes.Length);
            mStream.Close();

            
return mMemory.ToArray();
        }
 


        
public static byte[] DeCompress(byte[] pBytes) 
        

            ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream mStream 
= new ICSharpCode.SharpZipLib.Zip.Compression.Streams.InflaterInputStream(new MemoryStream(pBytes));
            
            MemoryStream mMemory 
= new MemoryStream();
            Int32 mSize;

            
byte[] mWriteData = new byte[4096];

            
while(true)
            
{
                mSize 
= mStream.Read(mWriteData, 0, mWriteData.Length);
                
if (mSize > 0)
                
{
                    mMemory.Write(mWriteData, 
0, mSize);
                }

                
else
                
{
                     
break;
                }

            }


            mStream.Close();
            
return mMemory.ToArray();
        }
 

    }

}


使用方法(ASPX.CS页面继承MSPlus.Web.UI.Page):public class PageClass : System.Web.UI.Page


测试下来的结果:压缩后的ViewState只有原来的20%!


我作了一个小小的测试.先后用同一个页面加密和不加密的情况下,刷新页面观测w3wp.exe的CPU占用情况.此页面的ViewState大小为3.996 Bytes

w3wp.exe 以下是每次刷新的时CPU的情况

05 03 05 03 06 05 05 08 03 05 03 不加密,平均是 4.6
05 05 06 05 05 03 08 02 03 05 06 加密,平均是5.3

posted @ 2005-07-27 21:47 Mack.Z 阅读(4856) | 评论 (25)编辑

MSPlus.TabControl支持状态保存,SelectedIndexChanged事件,支持多层嵌套等功能,支持动态新增删除修改TabPage并保存其状态...

MSPlus.TabControl常用属性和方法以及事件的说明:

MSPlus.TabControl.Width = 控件的宽度
MSPlus.TabControl.Height = 控件的高度
MSPlus.TabControl.SelectedIndex  = 获取或设置选中的Tab页索引编号
MSPlus.TabControl.SelectionMode(Server or Client)= 每次Tab页的切换在客户端完成还是每次都需要返回服务器端
MSPlus.TabControl.Items = 获取所有Tab页的容器
MSPlus.TabControl.SelectedIndexChanged(事件)= Tab选中页改变时触发的事件

MSPlus.TabPage常用属性和方法的说明:
MSPlus.TabPage.ID = TabPage编号(不可重复)
MSPlus.TabPage.Caption = TabPage的标题
MSPlus.TabPage.Enabled = TabPage是否可用
MSPlus.TabPage.Visabled = TabPage是否显示

MSPlus.TabControl.Items 常用属性和方法的说明
public void Add(TabPage pTab)  动态增加一个页
public void Insert(Int32 pIndex, TabPage pItem)  动态插入一个页
public void Remove(TabPage pTab)  动态移除一个页
public Boolean Contains(TabPage pTab) 指定的页是否存在
public int IndexOf(TabPage pItem) 指定页的索引编号
public void CopyTo(TabPage[] pArray, Int32 pIndex) 批量指定位置的复制


下载MSPlus.TabControl V1.1 演示和控件 - 2005-7-15

posted @ 2005-07-14 22:55 Mack.Z 阅读(3693) | 评论 (48)编辑



MSPlus.TabControl支持状态保存,SelectedIndexChanged事件,支持多层嵌套等功能...

MSPlus.TabControl常用属性和方法以及事件的说明:

Unit Width = 控件的宽度
Unit Height = 控件的高度
Int32 SelectedIndex  = 获取或设置选中的Tab页索引编号
SelectionMode(Server or Client)= 每次Tab页的切换在客户端完成还是每次都需要返回服务器端
Items = 获取所有Tab页的容器
SelectedIndexChanged(事件)= Tab选中页改变时触发的事件

使用样例:

<%@ Register TagPrefix="msp" Namespace="MSPlus" Assembly="MSPlus.TabControl" %>

..

<LINK href="Common/CSS/Default.CSS" type="text/css" rel="stylesheet">
<script language="JavaScript" src="Common/JavaScript/Tab.js"></script>

..

<msp:tabcontrol id="TabControl1" style="Z-INDEX: 100; LEFT: 128px; POSITION: absolute; TOP: 80px"
    runat
="server" SelectionMode="Server" width="500" height="150">
    
<msp:TabPage Caption="春暖花开" ID="tabPage1">
        
<msp:TabControl id="TabControl2" runat="server" height="120">
            
<msp:TabPage Caption="春暖" ID="tabPage11">多层TabControl嵌套</msp:TabPage>
            
<msp:TabPage Caption="夏日" ID="tabPage21"></msp:TabPage>
            
<msp:TabPage Caption="秋高" ID="tabPage31"></msp:TabPage>
            
<msp:TabPage Caption="冬季" ID="tabPage41"></msp:TabPage>
        
</msp:TabControl>
    
</msp:TabPage>
    
<msp:TabPage Caption="夏日炎炎" ID="tabPage2">
        
<asp:TextBox id="TextBox1" runat="server"></asp:TextBox>
        
<br>
        
<asp:Button id="Button3" Text="DoPostBack(测试状态保存)" runat="server"></asp:Button>
    
</msp:TabPage>
    
<msp:TabPage Caption="秋高气爽" ID="tabPage3">
        
<asp:Button id="Button2" Text="DoPostBack" runat="server"></asp:Button>
    
</msp:TabPage>
    
<msp:TabPage Caption="冬季运动" ID="tabPage4">
        
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
    
</msp:TabPage>
</msp:tabcontrol>

namespace TabControlDemo
{
    
/// <summary>
    
/// WebForm1 的摘要说明。
    
/// </summary>

    public class WebForm1 : System.Web.UI.Page
    
{
        
protected MSPlus.TabControl TabControl1;
    
        
private void Page_Load(object sender, System.EventArgs e)
        
{
            
// 在此处放置用户代码以初始化页面
        }


        
#region Web 窗体设计器生成的代码
        
override protected void OnInit(EventArgs e)
        
{
            
//
            
// CODEGEN: 该调用是 ASP.NET Web 窗体设计器所必需的。
            
//
            InitializeComponent();
            
base.OnInit(e);
        }

        
        
/// <summary>
        
/// 设计器支持所需的方法 - 不要使用代码编辑器修改
        
/// 此方法的内容。
        
/// </summary>

        private void InitializeComponent()
        
{    
            
this.TabControl1.SelectedIndexChanged += new System.EventHandler(this.TabControl1_SelectedIndexChanged);
            
this.Load += new System.EventHandler(this.Page_Load);

        }

        
#endregion


        
private void TabControl1_SelectedIndexChanged(object sender, System.EventArgs e)
        
{
            事件被触发
        }


    }


需要源码的朋友,可留下EMAIL

下载MSPlus.TabControl V1.0 Beta演示和控件



查看MSPlus.TabControl V1.1 更新说明

下载MSPlus.TabControl V1.1 演示和控件 - 2005-7-15

posted @ 2005-07-14 00:16 Mack.Z 阅读(5120) | 评论 (113)编辑

将HTML网页(文本)等转换为图片的类库



以上是使用 HtmlConvertImage (Html2Image) 类库所作的演示小工具


MSPlus.HtmlConvertImage mHCont = new MSPlus.HtmlConvertImage();


//设置图片的长度,如果网页的长度超过一张图片的长度时自己将其分割在多张图片中
mHCont.ConvertImage(mUrl,Int32.Parse(textBox4.Text),mSaveTo,mFileName);


//所有网页生成在一张图片中
MSPlus.HtmlConvertImage mHCont = new MSPlus.HtmlConvertImage();
mHCont.ConvertImage(mUrl,mSaveTo,mFileName);


以下是分割后的效果

ATA0.PNG



ATA1.PNG



ATA2.PNG



HtmlConvertImage.Dll 使用说明

自定义长度的获取方式,文件将会自动切割.返回多张图片的文件名
public String[] ConvertImage(String mUrl, Int32 mPageLength, String mOutputDir, String mOutputFile)

网页保存为一张图片,图片的长度就是网页的长度.返回图片文件名
public String ConvertImage(String mUrl, String mOutputDir, String mOutputFile)

设置图片上的水印
public string MarkStr

随笔:因为项目的需要,当初是想从网上找个能完成Html2Image的工具,但找了半天只找到一家,而且还是要收费,并且没有DLL只是一个EXE应用程序(就是这家 http://www.sysimage.com/windows/html2image/default.aspx),无奈之下只能自行开发.目前实现的功能比较简单,等有空了在继续完善!哈哈


下载 HtmlConvertImage.RAR
posted @ 2005-07-09 22:23 Mack.Z 阅读(5619) | 评论 (46)编辑

     摘要: Gaia是一个主版頁面规划工具  GAIA(Master Page)可以讓您規劃出網站主體風格,使其他的內容頁面或是不同主題都擁有一致的外觀樣式。將來修改網站風格的時候,只需將Master Page換掉,就可以擁有一個全新風格的網站。GAIA V1.0 Beta(MASTERPAGE)下载地址: http://www.cnblogs.com/mack/articles/176872.html类文件... 阅读全文
posted @ 2005-06-18 21:22 Mack.Z 阅读(7307) | 评论 (16)编辑