论坛首页
·
友情链接申请
·
申请版主
·
广告投放
·
道具中心
·
设为首页
·
收藏本站
注册
登录
会员
搜索
标签
帮助
大学编程
»
ASP/ASP.NET论坛
» ASP.NET效率陷阱之——Attributes
‹‹ 上一主题
|
下一主题 ››
发新话题
发布投票
发布商品
发布悬赏
发布活动
发布辩论
发布视频
打印
ASP.NET效率陷阱之——Attributes
本帖已经被作者加入个人空间
本主题由 lg107142982 于 2008-6-10 12:13 打开
Teenits
Passion
Administrator
Stubc Team
UID
1
帖子
1014
精华
9
积分
13754
所在学校
南京理工大学
所属专业
计算机科学与技术
阅读权限
200
性别
男
来自
江苏
在线时间
1362 小时
注册时间
2008-3-9
个人空间
发短消息
加为好友
当前离线
1
#
大
中
小
发表于 2008-5-24 16:57
只看该作者
ASP.NET效率陷阱之——Attributes
作者: 出处: cnblogs
众所周知,在编写
Web
CustomControl时,继承于
Web
Control基类的Attributes以及其Attributes.CssStyle属性是十分常用和重要的。但就是这两个重要的属性,如果
开发
中使用不当却会带来莫名其妙的
效率
问题。
由于html的灵活性和不完备性,导致了WebControl基类没有完整的表现html
元素
所提供和支持的所有标签属性和CSS属性(当然由于不同browser的兼容问题,要提供完备的属性是不可能的)。又由于很多html标签属性和CSS属性都是很生僻的,很少或极少被使用,如果要完备的支持,反而会成为WebControl的负担。所以Attributes和Attributes.CssStyle这两个属性很好的解决了这个问题,当然这两个属性除了支持应有的html标签属性和CSS属性外,还支持任何合法的自
定义
key/value对。这里要讨论的问题就来之这个对自
定义
key/value对的支持上。
Attributes属性的
类型
是一个AttributeCollection,本来很自然的一个东西,可是不知道怎么搞得,AttributeCollection的构造
函数
却需要一个StateBag参数:
public
AttributeCollection(StateBag bag)
{
this
._bag
=
bag;
}
这样的结果就是,Attributes和Attributes.CssStyle可能会被保存在ViewState中,事实上
ASP
.NET默认确实会保存其中的内容到ViewState中。
这种
设计
真的是让人觉得莫名其妙,在大家对ViewState效率问题的讨论中,觉得ViewState确实是鸡肋,用来保持一些
服务器
状态和
数据
让大家觉得方便也就算了。可是居然把和UI相关的内容都一股脑存到ViewState里,真的是疯狂。
下面是使用Attributes定义了一些自定义内容后的ViewState的情形:
// AnalysisReport自定义
控件
上定义了一些自定的内容
Attributes和Attributes.CssStyle被自动保存到ViewState中后,除了ViewState体积急增后,PostBack时Load ViewState的负担也同时增大了。上面这个事例中的页面PostBack的LoadState代价,如下图:
实际上我在编写控件时,从来没有想过要保持Attributes和Attributes.CssStyle,也没有想过要再次使用其中的数据。而且这个默认保存到ViewState的行为居然不能定制(至少我还没有发现),后来想到在ASP.NET页面生存期中,SaveState结束在PreRender中,所以在Render事件中使用Attributes和Attributes.CssStyle的就不会保存到ViewState中去。
修改
代码
:
protected
override
void
OnPreRender(EventArgs e)
{
this
.Attributes[
"
abc
"
]
=
"
123
"
;
this
.Attributes.CssStyle[
"
abc-style
"
]
=
"
123-style
"
;
base
.OnPreRender(e);
}
为如下形式:
protected
override
void
Render(
Html
TextWriter output)
{
this
.Attributes[
"
abc
"
]
=
"
123
"
;
this
.Attributes.CssStyle[
"
abc-style
"
]
=
"
123-style
"
;
output.Write(Text);
}
就不会再将Attributes和Attributes.CssStyle保存到ViewState中了,上面那个AnalysisReport按上面的示例修改后,绑定同样数据的运行效果为:
LoadState的代价也大大降低,其开销为:
搜索更多相关主题的帖子:
Attributes
NET
陷阱
ASP
效率
回帖既是一种美德,是对作者的鼓励,同时又为后来者推荐了好文章,何乐而不为呢?
UID
1
帖子
1014
精华
9
积分
13754
所在学校
南京理工大学
所属专业
计算机科学与技术
阅读权限
200
性别
男
来自
江苏
在线时间
1362 小时
注册时间
2008-3-9
最后登录
2008-11-19
查看个人网站
查看详细资料
TOP
‹‹ 上一主题
|
下一主题 ››
控制面板首页
编辑个人资料
积分记录
公众用户组
个人空间管理
升级个人空间
基本概况
流量统计
客户软件
发帖量记录
版块排行
主题排行
发帖排行
积分排行
交易排行
在线时间
管理团队