知识大全 c#(或vb.net)程序改进,可以提高性能

Posted 类型

篇首语:智者不为愚者谋,勇者不为怯者死。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 c#(或vb.net)程序改进,可以提高性能相关的知识,希望对你有一定的参考价值。

   使用值类型的ToString方法

  在连接字符串时 经常使用 + 号直接将数字添加到字符串中 这种方法虽然简单 也可以得到正确结果 但是由于涉及到不同的数据类型 数字需要通过装箱操作转化为引用类型才可以添加到字符串中 但是装箱操作对性能影响较大 因为在进行这类处理时 将在托管堆中分配一个新的对象 原有的值复制到新创建的对象中

  使用值类型的ToString方法可以避免装箱操作 从而提高应用程序性能

  int num= ;

  string str= go +num ToString();

   运用StringBuilder类

  String类对象是不可改变的 对于String对象的重新赋值在本质上是重新创建了一个String对象并将新值赋予该对象 其方法ToString对性能的提高并非很显著

  在处理字符串时 最好使用StringBuilder类 其 NET 命名空间是System Text 该类并非创建新的对象 而是通过Append Remove Insert等方法直接对字符串进行操作 通过ToString方法返回操作结果

  其定义及操作语句如下所示

  int num;

  System Text StringBuilder str = new System Text StringBuilder(); //创建字符串

  str Append(num ToString()); //添加数值num

  Response Write(str ToString); //显示操作结果

   使用 HttpServerUtility Transfer 方法在同一应用程序的页面间重定向

  采用 Server Transfer 语法 在页面中使用该方法可避免不必要的客户端重定向(Response Redirect)

   避免使用ArrayList

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

   使用HashTale代替其他字典集合类型

  (如StringDictionary NameValueCollection HybridCollection) 存放少量数据的时候可以使用HashTable

   为字符串容器声明常量 不要直接把字符封装在双引号 里面

  //避免

  MyObject obj = new MyObject();

  obj Status = ACTIVE ;

  //推荐

  const string C_STATUS = ACTIVE ;

  MyObject obj = new MyObject();

  obj Status = C_STATUS;

   不要用ToUpper() ToLower()转换字符串进行比较 用String Compare代替 它可以忽略大小写进行比较

  例

  const string C_VALUE = PARE ;

  if (String Compare(sVariable C_VALUE true) == )

  

  Console Write( 相同 );

  

  也可以用str == String Empty或者str Length == 判断是否为空 (注意判断输入数据的长度 可防止sql注入式攻击)

  将String对象的Length属性与 比较是最快的方法 避免不必要的调用 ToUpper 或 ToLower 方法

   类型转化Int TryParse()优于Int Parse()优于Convert ToInt ()

  建议 NET 下用Int Parse() NET 用Int TryParse()

  因为

  Convert ToInt 会把最终的解析工作代理给 Int Parse

  Int Parse 会把最终的解析工作代理给Number ParseInt

  Int TryParse 会把最终的解析工作代理给Number TryParseInt

   如果只是从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+ ;

  

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

  C#程序开发要遵循的一个基本原则就是避免不必要的对象创建

  //避免

  for(int i= ; i< ; i++)

  

  SomeClass objSC = new SomeClass();

  

  //推荐

  SomeClass objSC = null;

  for(int i= ; i < ; i++)

  

  objSC = new SomeClass();

  

   捕获指定的异常 不要使用通用的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>

  

   使用Try catch finally时 要在finally里释放占用的资源如连接 文件流等

  不然在Catch到错误后占用的资源不能释放

  try

  

  catch

  

  finally

  

  conntion close();

  

   不要用Exception控制程序流程

  有些程序员可能会使用异常来实现一些流程控制 例如

  try

  result= /num;

  

  Catch(Exception e)

  

  result= ;

  

  但实际上 Exception是非常消耗系统性能的 除非必要 不应当使用异常控制来实现程序流程 上面的代码应当写为

  if(num!= )

  result= /num;

  else

  result= ;

   避免使用递归调用和嵌套循环 使用他们会严重影响性能 在不得不用的时候才使用

   禁用和Jscript动态数据类型

  应当始终显示地申明变量数据类型 这能够节约程序的执行时间 以往 开发人员喜欢使用 Visual Basic VBScript 和 JScript 的原因之一就是它们所谓 无类型 的性质 变量不需要显式类型声明 并能够简单地通过使用来创建它们 当从一个类型到另一个类型进行分配时 转换将自动执行 不过 这种便利会大大损害应用程序的性能

  如

cha138/Article/program/net/201311/13198

相关参考

知识大全 用vb.net实现闹钟提醒程序

  一个提醒程序最典型的就是闹钟程序网上有不少个性化的提醒程序下载但是大部分都是以时间为主的闹钟提醒我们也可以用来打造一个适合自己的提醒程序比如监控一个某个应用程序的变化然后发出声音提醒自己等等  一

知识大全 VB.NET和C#逐层横向对比[1]

VB.NET和C#逐层横向对比[1]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //全局层 

知识大全 VB.NET和C#逐层横向对比[2]

VB.NET和C#逐层横向对比[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  //函数层 

知识大全 使用VB.Net查找程序的前一个运行结果

使用VB.Net查找程序的前一个运行结果  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  可以从获

知识大全 VB.NET 2005编写定时关机程序

VB.NET2005编写定时关机程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  最近在网上搜

知识大全 vb.net graphic 简单的画图程序

  [vb]  PublicClassForm  DimDrawStateAsBoolean  DimPreXAsSingle  DimPreYAsSingle  DimePAsNewPen(Colo

知识大全 用VB.net2008编写屏幕抓捕程序

用VB.net2008编写屏幕抓捕程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!VisualS

知识大全 VB.net2008打造精美电子日历程序

VB.net2008打造精美电子日历程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  Visu

知识大全 VB.NET编写测试硬盘速度的程序

VB.NET编写测试硬盘速度的程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  前日在用SiS

知识大全 完整的VB.NET的语法解析程序

完整的VB.NET的语法解析程序  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 比较长不过支持全部