ASP.NET效率陷阱——Attributes

引:众所周知,在编写WebCustomControl时,继承于WebControl基类的Attributes以及其Attributes.CssStyle属性是十分常用和重要的。但就是这两个重要的属性,如果开发中使用不当却会带来莫名其妙的效率问题。

众所周知,在编写WebCustomControl时,继承于WebControl基类的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(HtmlTextWriter output)
{
    this.Attributes["abc"] = "123";
    this.Attributes.CssStyle["abc-style"] = "123-style";
    output.Write(Text);
}

就不会再将Attributes和Attributes.CssStyle保存到ViewState中了,上面那个AnalysisReport按上面的示例修改后,绑定同样数据的运行效果为:

LoadState的代价也大大降低,其开销为:

转载于:https://www.cnblogs.com/wsky/articles/835205.html

[转]ASP.NET效率陷阱——Attributes相关推荐

  1. Asp.net MVC 4 Attributes特性

    Attributes特性 ActionFilterAttribute Represents the base class for filter attributes. 代表筛选器属性的基类. Acti ...

  2. asp+MsSQL2000模拟Html静态文件缓存

    这是 JavaScript 写的asp, 看不懂的完了. 其实我根本不想发出来的,因为夸我的人太少了. 如果你以后还想来点经典的怪异思维代码,来,夸我两句. 此代码目的: 不用asp创建Html文件的 ...

  3. [转] ASP.NET中使用javascript

    1.使用Page.ClientScript.RegisterClientScriptBlock 使用 Page.ClientScript.RegisterClientScriptBlock可以防止ja ...

  4. 关键词优化外包陷阱,你中招了吗?

    企业为了在短时间扩大网络营销,将其提上销售预案,同时为了节省企业成本多会选择将SEO关键词优化外包于专业的网络公司.孰不知,就SEO行业混乱局面,很多是选择采用了黑帽手法,相对于正常优化他们多以价格取 ...

  5. 效率源希捷自校准配套专修软件 v1.0 绿色

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  6. 效率源大容量硬盘检测修复程式 v3.0 光盘版 怎么用

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  7. 效率源希捷自校准配套专修软件 免费

    Welcome to my blog! <script language="javascript" src="http://avss.b15.cnwg.cn/cou ...

  8. php与asp.net的选择器,aspx是什么文件

    aspx文件是微软的在服务器端运行的动态网页文件,而不像静态的html文件,它通过IIS解析执行后可以得到动态页面,是微软推出的一种新的网络编程方法,而不是asp的简单升级. aspx文件是微软的在服 ...

  9. STL的remove函数和list的remove成员函数

    今天看书刚刚看的,就记录下来吧.这可能是老生常谈了,权且作为一个警醒的例子吧. 大家都知道STL有两个非常重要的组成部分,容器和算法. 算法就是一个个的函数,通过迭代器和容器关联在一起,完成一些工作. ...

最新文章

  1. linux----------CentOS的一些除了yum安装以外的基本操作命令。
  2. Squid配置二级代理(父代理)
  3. tp5中mysql使用REGEXP 正则匹配
  4. dial tcp xxx: connectex: A connection attempt failed
  5. 随想录(设计软件模块的接口)
  6. 阿里AI实验室负责人浅雪:从不淘宝购物的马云是天猫精灵用户
  7. 三宝小精灵机器人_三宝小精灵幼育机器人-引领幼教AI新浪潮
  8. DeskPins v1.32 绿色汉化版
  9. 谷歌浏览器的视频下载插件推荐
  10. 超详细VRRP基础配置
  11. 应运而生的教学工具——《爱上micro:bit》读书笔记
  12. 【测试开发】Pytest—Html测试报告定制及封装
  13. 水果忍者腾讯版 v1.0.2 官方安卓版下载
  14. 给想去阿里面试的同学一些意见
  15. FPGA 名词解释(FPGA WORD EXPLANATION )
  16. 电脑WiFi图标不见了?!怎么办......≡ (▔﹏▔) ≡
  17. 如何用excel求平均数?认准average()——搜索函数时千万别输mean,否则会得到geomean()
  18. axios 请求拦截器响应拦截器
  19. React从零开始搭建项目
  20. 手机APP连接华为OceanConnect平台下发指令控制硬件(附Android Studio 代码工程和APK)

热门文章

  1. spring的自生一个bug
  2. 《HTML5移动应用开发入门经典》—— 1.1 了解HTML5的由来
  3. jpa tutorials
  4. 规范化的递归转换成非递归
  5. UIVIewController自定义切换效果-b
  6. Hiberante+jpa,注解生成32字符的Id
  7. 一种导致android开发时无法生成R.java文件的原因
  8. release和retain还有多少人在用
  9. 【Spring学习笔记】之【3.3 DI的深入 二】
  10. 石川es6课程---18、ES6 复习