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

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

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

2005年5月16日 #

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

将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 阅读(5608) | 评论 (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 阅读(7295) | 评论 (16)编辑

自从装了MSN7之后就感觉他其中的Winks挺好玩的,但用来用去也就这么些。昨天晚上洗澡时就在想如果能DIY Winks的话,那到时挺好玩的。
今天一早来公司,正事到先没干(哈,别想同事们看到了)。就先忙着研究Winks了。

首先找到了MSN Winks的所在目录
一般也就是以下路径,中间的zhuguoping和3662667825会应登录帐户和环境而有所不同。
C:\Documents and Settings\zhuguoping\Application Data\Microsoft\MSN Messenger\3662667825\Winks3

打开这个目录后发现很多个dat文件,先用一个用二进制的编辑器先打开看看。发现原来是一个多文件合并后产生的文件,又看了一会,原来就是一个CAB打包文件。

大家可以直接将Dat改名为Cab后用Cab打包软件打开看看。
一般里面包含一个Swf和一个PNG以及一个Content.xml三个文件。

下面就来说说三个文件的作用。
Swf这个文件我就不多说了,一个Flash的文件。
PNG这个文件可以理解为Flash的缩略图文件。
Content.Xml就是含个Cab的定义和配置文件。

格式如下:

<?xml version="1.0" encoding="UTF-8" ?>
<package xmlns="http://messenger.msn.com/messengercontent/1.0" version="1.0" type="wink" xmlns:wink="http://messenger.msn.com/winks/1.0" wink:version="1.0" wink:name="Toasting Glasses" partnerid="AG">
 <item contentid="AGW3065297" contenttype="P" type="animation" mimetype="application/x-shockwave-flash" file="3065297f.swf" wink:sizex="640" wink:sizey="429" />
 <item type="thumbnail" mimetype="image/png" file="3065297m.png" />
</package>

微软的开发还是很规范的,从Xml节点定义的名称就基本能猜出是什么意义了。


先写到这吧,还有N多正事等在后面了,晚上再补充。有兴趣的朋友可以再仔细研究一下,用C#写个制作自定义的Winks应该不是太难。

posted @ 2005-05-16 10:33 Mack.Z 阅读(6415) | 评论 (15)编辑