当前位置: 首页 > 编程日记 > 正文

如何最大限度提高.NET的性能

优化 .NET的性能

1)避免使用ArrayList。
     因为任何对象添加到ArrayList都要封箱为System.Object类型,从ArrayList取出数据时,要拆箱回实际的类型。建议使用自定义的集合类型代替ArrayList。.net 2.0提供了一个新的类型,叫泛型,这是一个强类型,使用泛型集合就可以避免了封箱和拆箱的发生,提高了性能。

2)使用HashTale代替其他字典集合类型(如StringDictionary,NameValueCollection,HybridCollection),存放少量数据的时候可以使用HashTable.

3)为字符串容器声明常量,不要直接把字符封装在双引号" "里面。
      //避免
      //
      MyObject obj = new MyObject();
      obj.Status = "ACTIVE";

//推荐
      const string C_STATUS = "ACTIVE";
      MyObject obj = new MyObject();
      obj.Status = C_STATUS;

4) 不要用UpperCase,Lowercase转换字符串进行比较,用String.Compare代替,它可以忽略大小写进行比较.
  
   例:
 
      const string C_VALUE = "COMPARE";
      if (String.Compare(sVariable, C_VALUE, true) == 0)
      {
      Console.Write("SAME");
      }


5) 用StringBuilder代替使用字符串连接符 “+”,.

//避免
      String sXML = "<parent>";
      sXML += "<child>";
      sXML += "Data";
      sXML += "</child>";
      sXML += "</parent>";

//推荐
      StringBuilder sbXML = new StringBuilder();
      sbXML.Append("<parent>");
      sbXML.Append("<child>");
      sbXML.Append("Data");
      sbXML.Append("</child>");
      sbXML.Append("</parent>");

6) If you are only reading from the XML object, avoid using XMLDocumentt, instead use XPathDocument, which is readonly and so improves performance.
如果只是从XML对象读取数据,用只读的XPathDocument代替XMLDocument,可以提高性能
      //避免
      XmlDocument xmld = new XmlDocument();
      xmld.LoadXml(sXML);
      txtName.Text = xmld.SelectSingleNode("/packet/child").InnerText;

.

//推荐
      XPathDocument xmldContext = new XPathDocument(new StringReader(oContext.Value));
      XPathNavigator xnav = xmldContext.CreateNavigator();
      XPathNodeIterator xpNodeIter = xnav.Select("packet/child");
      iCount = xpNodeIter.Count;
      xpNodeIter = xnav.SelectDescendants(XPathNodeType.Element, false);
      while(xpNodeIter.MoveNext())
      {
      sCurrValues += xpNodeIter.Current.Value+"~";
      }


7) 避免在循环体里声明变量,应该在循环体外声明变量,在循环体里初始化。

//避免
      for(int i=0; i<10; i++)
      {
      SomeClass objSC = new SomeClass();
      .
      .
      .

}

//推荐
      SomeClass objSC = null;
      for(int i=0; i<10; i++)
      {
      objSC = new SomeClass();
     
      .
      .
      .
      }

8) 捕获指定的异常,不要使用通用的System.Exception.

//避免
      try
      {
      <some logic>
      }
      catch(Exception exc)
      {
      <Error handling>
      }
     
      //推荐
      try
      {
      <some logic>
      }
      catch(System.NullReferenceException exc)
      {
      <Error handling>
      }
      catch(System.ArgumentOutOfRangeException exc)
      {
      <Error handling>
      }
      catch(System.InvalidCastException exc)
      {
      <Error handling>
      }

9) 使用Try...catch...finally时, 要在finally里释放占用的资源如连接,文件流等
不然在Catch到错误后占用的资源不能释放。
       
        try
      {
         ...
      }
      catch
        {...}
        finally
        {
          conntion.close()
        }    
10) 避免使用递归调用和嵌套循环,使用他们会严重影响性能,在不得不用的时候才使用。

11) 使用适当的Caching策略来提高性能

相关文章:

别找了,Thonny 才是 Python 小白的最理想的 IDE

来源 | Python编程时光作者 | 写代码的明哥头图 | 下载于视觉中国当你在搜索引擎&#xff08;如百度&#xff09;或者各种问答社区&#xff08;如知乎&#xff09;搜索『学习Python 最好的 IDE/编辑器是哪个&#xff1f;』的时候&#xff0c;我想答案肯定是&#xff1a;PyCharm…

图书抄袭何时休,技术人的版权在哪里?

今天&#xff0c;一个很偶然的机会&#xff0c;看到了一本北京邮电大学出版社出版的技术图书《Linux服务器架设、性能调优、集群管理教程——实训与项目案例》&#xff0c;感觉有种似曾相识的感觉&#xff0c;于是打开目录大概了解了下&#xff0c;一个我不想看到的现象发生了&…

让MySql支持表情符号(MySQL中4字节utf8字符保存方法)

UTF-8编码有可能是两个、三个、四个字节。Emoji表情是4个字节&#xff0c;而MySQL的utf8编码最多3个字节&#xff0c;所以数据插不进去。解决方案&#xff1a;将编码从utf8转换成utf8mb4。 1. 修改my.ini [mysqld] character-set-serverutf8mb4 2. 在Connector/J的连接参数中&a…

短信编码类无错版PDUdecoding.cs

////程 序 员&#xff1a;武志文(蚕蛹)/// sillnet163.net///文 件&#xff1a;PDUdecoding.cs///概 要&#xff1a;针对国内短信编码&#xff08;USC2&#xff09;///组成结构&#xff1a;包含四个函数&#xff1a;/// smsDecodedCenterNumber(string…

你还有学了三年建模的朋友吗?他有救了

【 编者按】“我朋友学了 3 年建模”系列&#xff0c;一直以浮夸的操作占据于各大视频网站搞笑榜。此前&#xff0c;来自布拉格捷克理工大学、 Google 研究院、和华盛顿大学以及苏黎世联邦理工学院的研究者们发布了 Monster Mash 项目的论文和动效视频。用户绘制二维图像&#…

iOS培训objective-c——实例化对象

蓝鸥iOS培训推荐&#xff1a;好像好长时间没和大家分享了&#xff0c;那么今天主要和大家说说OC内容创建实例化对象&#xff0c;基本让也就分为几大类&#xff1a;1.ClassName*myNewClassName;//指针2.myNewClassName[ClassNamealloc];//通过alloc这个命令申请一个空间来存放我…

#423 Div2 D

#423 Div2 D 题意 构造一个 n 个节点的树&#xff0c;恰好有 k 个叶子节点 (叶子节点的定义是只与树上的某一个节点存在连边)&#xff0c;要求任意两个叶子节点的距离的最大值最小&#xff0c;距离为两个节点间边的数量&#xff0c;输出距离的最大值&#xff0c;以及 n - 1 条边…

CDMA模块上网设置的过程

CDMA模块上网设置的过程一&#xff09; AT指令设置部分&#xff08;1&#xff09; ATCSQ 检查信号 若返回10—31&#xff0c;99之间的信号数字则继续&#xff0c;如果信号是99&#xff0c;99&#xff0c;则应该考虑不停的键入A/命令&#xff0c;不停的让模块去搜寻网络。&…

RedHat 年度报告:只索取不贡献的开源消费“大户”不受待见

编译 | 清儿爸编辑 | 夕颜头图 | 下载于视觉中国据 Red Hat 公司委托发布的一份新报告称&#xff0c;新冠疫情可能在云计算基础设施和企业开源软件方面留下不可磨灭的印记。Red Hat 是 IBM 于 2018 年以 340 亿美元收购的企业开源软件产品供应商。第三次年度《企业开源现状》&a…

做产品的一些思考

从我当前的职业经历来看&#xff0c;做过两种类别的产品&#xff1a;一种是客户定义好了需求由我们去实现&#xff0c;我姑且称其为做项目&#xff1b;一种是自己去探索用户需求然后在不断的摸索中引导用户&#xff0c;实现价值&#xff0c;这是我笔下真正的产品。做项目目标明…

查看JDK的历史版本

1.打开如下链接http://www.oracle.com/technetwork/java/javase/downloads/index.html2.查找如下内容,点击进行3.选择你需要的版本,点击进入4.找到相应的版本下载即可转载于:https://blog.51cto.com/suyanzhu/1947530

终于有人解救Python人了!

从事Python开发的这些年中&#xff0c;我见过很多相关的入门教程和书籍&#xff0c;他们大都这样讲 &#xff1a;先介绍 Python 的基本语法规则、list、dict、tuple 等数据结构&#xff0c;然后再介绍字符串处理和正则表达式&#xff0c;介绍文件等IO操作.... 就这样一点一点往…

WISMO模块GPRS上网设置的过程

WISMO模块GPRS上网设置的过程一&#xff09; AT指令设置部分&#xff08;1&#xff09; ATCGCLASS“B”置为“B”模式。&#xff08;2&#xff09; ATCGDCONT1&#xff0c;“IP”&#xff0c;“CMNET”设置APN。&#xff08;3&#xff09; ATCSQ 检查信号 若返回10—31&#x…

【虚拟化实战】VM设计之一vCPU

作者&#xff1a;范军 &#xff08;Frank Fan&#xff09; 新浪微博&#xff1a;frankfan7虚拟机需要多少个vCPU呢&#xff1f;是不是个数越多性能越好呢&#xff1f;这方面存在着很多误区。给VM配置CPU资源的时候&#xff0c;要精打细算才能最大可能的利用已有资源&#xff0c…

新手小白 python之路 Day1 (三级菜单功能实现)

直接上需求: 实现一个多级菜单 三级菜单的实现 可以依次选择进入各个子菜单 也可以返回上级菜单 所需知识 列表 字典 需求也比较简单&#xff0c;但实际上做起来还是遇到许多的问题&#xff0c;我这边主要用到的知识点大概就是 字典 等 大致的思路 我…

简要AT命令介绍

FUNCTIONSAT COMMANDSDETAILS厂家认证ATCGMI获得厂家的标识模式认证ATCGMM查询支持频段修订认证ATCGMR查询软件版本生产序号ATCGSN查询IMEI NO.TE设置ATCSCS选择支持网络查询IMSIATCIMI查询国际移动电话支持认证卡的认证ATCCID查询SIM卡的序列号功能列表ATGCAP查询可供使用的功…

CentOS 5.6下创建KVM虚拟机

【51CTO专家投稿】RedHat 的下一代旗舰产品RedHat Enterprise Linux 6只包含 KVM&#xff0c;这一点 RedHat 官方已经在很久以前、在不同场合都确认过。KVM 发展很快&#xff0c;稳定性有了很大提高&#xff0c;随着 RHEL 6 的正式到来&#xff0c;KVM 应用到生产环境的日子应该…

手把手教你如何制作可视化大屏!

在我们生活和工作中&#xff0c;经常会看到可视化大屏&#xff0c;主要用于展示一些汇总信息&#xff0c;那如何制作一个酷炫的可视化大屏呢&#xff1f;今天带大家看个github上的案例。项目地址&#xff1a;https://github.com/yyhsong/iDataV/tree/master/case09效果如下&…

ES5和ES6数组遍历方法详解

ES5和ES6数组遍历方法详解 在ES5中常用的10种数组遍历方法: 1、原始的for循环语句2、Array.prototype.forEach数组对象内置方法3、Array.prototype.map数组对象内置方法4、Array.prototype.filter数组对象内置方法5、Array.prototype.reduce数组对象内置方法6、Array.prototype…

短信猫GSM Modem

短信猫是用来收发短信的设备&#xff0c;和手机一样 插入SIM卡&#xff0c;通过&#xff08;USB或串口&#xff09;数据线/PCI插槽接到电脑上 在电脑上通过相关软件就可以实现短信收发的功能相关软件也就是收发短信的短信应用软件 可以自己开发&#xff0c;也可以要求短信猫设备…

数量级提升!深度学习让机器人抓取更高效

作者 | Jeffrey Ichnowski等译者 | 凌霄出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;摘要电子商务仓库中的拣选机器人需要快速计算各种配置之间有效且平稳的机器人手臂运动。最近的研究中是将抓取力分析与手臂运动规划结合&#xff0c;以计算最佳的手臂平滑运动&a…

phpcms_v9修改文章会提示 [hash]数据验证失败

收藏备用&#xff1a;phpcms\modules\content\templates\content_edit.tpl.phpaction"?mcontent&ccontent&aedit改成action"?mcontent&ccontent&aedit&pc_hash<?php echo $_SESSION[pc_hash];?>"转载于:https://blog.51cto.com/w…

横向ListView(一) ——开篇,基础逻辑实现

2019独角兽企业重金招聘Python工程师标准>>> 第一次写博文&#xff0c;写得不好的地方还望各位看客见谅 为了学习自定义软件开发&#xff0c;且定制出满足自己需求的控件&#xff08;不需要将就地使用第三方源码&#xff09;&#xff0c;本人花了一周的时间开发了个…

HTTP Response中的Chunked编码

进行Chunked编码传输的HTTP Response会在消息头部设置&#xff1a; Transfer-Encoding: chunked 表示Content Body将用Chunked编码传输内容。 Chunked编码使用若干个Chunk串连而成&#xff0c;由一个标明长度为0的chunk标示结束。每个Chunk分为头部和正文两部分&#xff0c;头部…

ORACLE RAC 更改instance name完整步骤

下面是更改的部分步骤&#xff0c;但是启动问题还是存在&#xff0c;求达人完整。单实例的数据库修改SID比较简单&#xff0c;只需要修改pfile相关参数&#xff0c;就可以挂载数据库。 RAC环境其实一样&#xff0c;只不过除了修改pfile&#xff0c;还需要修改 OCR信息。首先来看…

炸裂!微软重磅推出混合现实平台 Mesh、基于 Excel 的低代码语言 Power Fx,Ignite 2021 太精彩!...

作者 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;“一开始&#xff0c;这就是混合现实的梦想。” 在微软 Ignite 2021 大会上&#xff0c;微软 HoloLens 之父 Alex Kipman 头戴 HoloLens 2&#xff0c;出现在科技感十足的海底世界虚拟舞台上&#xff0…

Apache Spark 2.2.0 中文文档 翻译活动

为什么80%的码农都做不了架构师&#xff1f;>>> Spark 2.2.0 已然发布&#xff08;2017-07-11 发布&#xff09; 5 天了&#xff0c;更新了一些新套路吧&#xff01; 此版本从 Structured Streaming&#xff08;结构化流&#xff09;中删除 experimental&#xff0…

Unity3D常用代码总结

1 GUI汇总 function OnGUI() { GUI.Label(Rect(1,1,100,20),"Im a Label"); //1 GUI.Box(Rect(1,21,100,20),"Im a Box"); //2 GUI.Button(Rect(1,41,100,20),"Im a Button"); //3 GUI.RepeatButton(Rect(1,61,120,20),"Im a RepeatButton&…

Python 搭建车道智能检测系统

作者 | 李秋键责编 | 寇雪芹出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09;引言&#xff1a;本文将利用opencv实现对复杂场景下车道线的实时检测&#xff1b;所使用的图像处理方法主要是在读取图片的基础上&#xff0c;进行多种边缘检测&#xff0c;然后对不同的检测…

ASP.NET弹出窗口技术之增加网站流量方法

作为Microsoft的最新建立动态Web网站的工具,ASP.NET相对于ASP和JSP在改变原始的Web编程方式方面有了长足的长进。它的代码与页面分离技术(CodeBehind)以及完善的Web服务器控件为程序员提供了一个更加符合传统编程的Web服务器端开发方式。但Web编程还是有着与传统编程不相同的特…