常见.NET技术面试题.docx_第1页
常见.NET技术面试题.docx_第2页
常见.NET技术面试题.docx_第3页
常见.NET技术面试题.docx_第4页
常见.NET技术面试题.docx_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

常见.NET技术面试题C#什么是委托?委托和事件是什么关系?答:简单的说:委托是一种方法容器,里面可以装载若干个具有相同签名的方法引用地址,那么调用委托,就相当于同时调用了该容器内的所有方法。委托可以将方法作为参数传递给方法. 事件是一种特殊的委托什么是反射? 答: 反射提供了封装程序集,模块和类型对象,可以用反射动态地创建类型的实例,将类型绑定到现有对象,或者从现有对象类型里获取类型,然后调用类型的方法或访问字段和属性。C#中是否可以从多个类中继承?如何实现多重继承? 答:不能,要想实现多继承,就用接口什么是密封类? 答: 密封类是类的一种,用sealed修饰,不能用作基类。因此,它也不能是抽象类。密封类主要用于防止派生。using关键字有几种用途? 答:两种 (1)应用命名空间; (2)定义一个范围,在范围结束时处理对象#warning和#error分别的用途是什么?string和StringBuilder有什么区别? 答: String 对象是不可改变的。StringBuilder 对象是动态对象string 是常量,定义后不能改变,stringbuilder定义后 可以改变,且线程不安全const和readonly的区别? 答:const声明常量,raadonly是运行是的常量new、virtual、abstract、override、sealed的区别? New :(1)new 一个对象 (2)隐藏基类中的方法(3)在泛型时,new一个泛型类 Virtual: virtual 关键字用于修饰方法、属性、索引器或事件声明,并使它们可以在派生类中被重写。virtual 修饰符不能与 static、abstract, private 或 override 修饰符一起使用。Abstract: abstract 修饰符可以和类、方法、属性、索引器及事件一起使用。在类声明中使用 abstract 修饰符以指示某个类只能是其他类的基类。标记为抽象或包含在抽象类中的成员必须通过从抽象类派生的类来实现。 Override:重写:重写基类中的方法, 不能重写非虚方法或静态方法。 重写的基方法必须是 virtual、abstract 或 override 的。override 声明不能更改 virtual 方法的可访问性。 override 方法和 virtual 方法必须具有相同的访问级别修饰符。 Sealed:密封类不能作为基类, 密封类不能同时为抽象类abstract class和interface有什么区别? 答: 区别一,两者表达的概念不一样。抽象类是一类事物的高度聚合,那么对于继承抽象类的子类来说,对于抽象类来说,属于“是”的关系; 而接口是定义行为规范,因此对于实现接口的子类来说,相对于接口来说,是“行为需要按照接口来完成”。 区别二,抽象类在定义类型方法的时候,可以给出方法的实现部分,也可以不给出;而对于接口来说,其中所定义的方法都不能给出实现部分。 区别三,继承类对于两者所涉及方法的实现是不同的。继承类对于抽象类所定义的抽象方法,可以不用重写,也就是说,可以延用抽象类的方法; 而对于接口类所定义的方法或者属性来说,在继承类中必须要给出相应的方法和属性实现。 区别四,在抽象类中,新增一个方法的话,继承类中可以不用作任何处理; 而对于接口来说,则需要修改继承类,提供新定义的方法。 如下给出两者的简单对比表格。接口抽象类多继承支持不支持类型限制没有有,只能是引用类型方法实现继承类型中必须给出方法实现继承类中可以不给出扩展性比较麻烦相对比较灵活多层继承比较麻烦,需要借助虚函数比较灵活公共变量与属性的区别?答: (1)属性只能通过初始化类,创建对象后才能使用。变量则没有这方面要求,(2) 属性没有固定的地址,属性的赋值只是使指针;变量赋值只是变量的地址储存所指的地址值结构与类的区别?答:结构和类具有大体的语法,但是结构受到的限制比类要多。结构不能申明有默认的构造函数,为结构的副本是又编译器创建和销毁的,所以不需要默认的构造 函数和析构函数。结构是值类型,所以对结构变量所做的改变不会影响其的原值,而类是应用类型,改变其变量的值会改变其原值。申明结构用Struck关键 字,申明类用class关键字,向方法传递结构是时是通过值传递的,而不是通过引用。与类不同,结构的实例化可以不使用New关键字。类可以实现接口。ASP.NETASP.NET Web应用程序和ASP.NET网站的区别是什么?答: 都是设计网页的。都可以添加ASP.Net文件夹web应用程序Default.aspx显示有两个原有文件及Default.aspx.cs和Default.aspx.designer.cs;Web网站Default.aspx显示有一个原有文件Default.aspx.cs。web应用程序有重新生成和发布两项;Web网站只有一个发布网站。web应用程序和一般的winform没有什么区别都有引用的是命名空间等;Web网站在引用后出现一个bin文件夹那里存放dll和pdb文件。web应用程序可以作为类库被引用;Web网站则不可以作为类库被引用。web应用程序可以添加ASP.Net文件夹中不包括bin、App_Code;Web网站可以添加ASP.Net文件夹包括bin、App_Code。web应用程序还可添加组件和类;Web网站则没有。源文件虽然都是Default.aspx.cs但是web应用程序有命名空间,多了一项System.Collections空间引用。Web应用程序在修改了页面底层的代码之后需要重新进行编译网站不需要重新编译网站可以添加APS文件夹,Web应用程序不可以Web应用程序的项目会生成Dll文件网站在发布的时候,会自动生成Dll文件,但是每次的Dll文件名都不一样Web应用程序会有解决方案和项目文件WebSite编程模型的优点: 动态编译该页面,马上可以看到效果,不用编译整个站点(主要优势)同上,可以使错误的部分和使用的部分不相干扰(可以要求只有编译通过才能签入)可以每个页面生成一个程序集(不会采用这种方式)可以把一个目录当做一个Web应用来处理,直接复制文件就可以发布,不需要项目文件(无所谓,只适合小站点)可以把页面也编译到程序集中(应该用不到,而且WebApplication也可以通过WebDeployment插件来实现)页面事件的执行顺序?答: 1.对象初始化, 2.加载视图状态数据, 3.LoadPostData处理回传数据, 4.对象加载5.激发RaisePostDataChanged 事件, 6.处理客户端回传事件, 7.对象预呈现, 8.保存视图状态, 9.呈现HTML, 10.释放页面之间传值有哪几种方法?答:QueryString,session,cookies,application,server.Transfer,respose.redictor.ASP.NET服务器空件和HTML控件的区别?答: 1、ASP.NET服务器控件提供了统一的编程接口 2、ASP.NET服务器控件具有浏览器的无关性,也就是无论何种浏览器都能支持 3、ASP.NET服务器控件可以保存状态到ViewState里,这样页面在从客户端回传到服务器端或者从服务器端下载到客户端的过程中都可以保存 4、事件处理模型不同,HTML控件的事件处理都是在客户端的页面上,而ASP.NET服务器控件则是在服务器上综上所述HTML控件的事件是由客户端页面来触发的,而ASP.NET服务器控件则是由页面把WEB表单发回到服务器端,由服务器来处理Server.Transfer和Response.Redirect的区别?答: Server.Transfer方法把执行流程从当前的ASPX文件转到同一服务器上的另一个ASPX页面。调用Server.Transfer时,当前的ASPX页面终止执行,执行流程转入另一个ASPX页面,但新的ASPX页面仍使用前一ASPX页面创建的应答流。 如果用Server.Transfer方法实现页面之间的导航,浏览器中的URL不会改变,因为重定向完全在服务器端进行,浏览器根本不知XHTML,DHTML与HTML的区别?XHTML(The Extensible HyperText Markup Language(可扩展标识语言))实际上是HTML的升级版本。这一版本推出的目的是为了让人们更加容易接受XML,因为XML是为了web发展的方向,本质上说,XHTML是一个过渡技术,结合了部分XML的强大功能及大多数HTML的简单特性。DHTML:确切地说,DHTML只是一种制作网页的概念,实际上没有一个组织或机构推出过所谓的DHTML标准或技术规范之类的。DHTML不是一种技术、标准或规范,DHTML只是一种将目前已有的网页技术、语言标准整和运用,制作出能在下载后仍然能实时变换页面元素效果的网页的设计概念。Winform什么是MDI窗体?答:父窗体窗体间如何传递数据?答(1)使用接口传值(2)利用委托(3)使用构造函数进程与多线程有何区别?答: 进程就是一个单独程序打开了单独的一段地址空间进行单独的工作 而线程是一个程序用N段地址空间进行进行同一种操作微软官方对进程和线程的定义: 进程:用最简洁的话来说,进程就是一个正在执行的程序,一个或多个线程在进程中运行,线程是操作系统分配CPU运算时间的最小单位。每一个进程都提供了运行一个程序所必需的资源,一个进程具有4GB的虚拟地址空间什么是模态窗口?什么是非模态窗口?答: 对话框一般分为两种类型:模态类型(modal)与非模态类型(modeless)。所谓模态对话框,就是指除非采取有效的关闭手段,用户的鼠标焦点或者输入光标将一直停留在其上的对话框。非模态对话框则不会强制此种特性,用户可以在当前对话框以及其他窗口间进行切换。ADO.NETADO.NET对象模型包括哪几部分?答: 1.Connection 对象2.Command对象3.DataReader对象4.DataAdapter对象5.DateSet对象建立与数据库的访问需要几个步骤?答: 一般要通过以下四个步骤:1、创建一个到数据库的链路,即ADO.Connection;2、查询一个数据集合,即执行SQL,产生一个Recordset;3、对数据集合进行需要的操作;4、关闭数据链路。DataAdapter和DataReader有何不同?答: DataReader对象一般用于以下情况:只想读取数据时;从存储器中获得的数据只用于显示,而不做其他处理。DataSet对象(与DataAdapter对象一起使用)在以下情况:可能在数据源中修改(编辑或添加新的)数据时;想在读取数据后显示数据前对数据进行修改时。例如,你可能想将数据读入一些表中,或在多个表中的数据间创建关系。你也可能想约列,或者利用多个连接创建多个数据表。事务有哪几个属性?事务具有ACID属性即 Atomic原子性, Consistent一致性, Isolated隔离性, Durable永久性原子性就是事务应作为一个工作单元,事务处理完成,所有的工作要么都在数据库中保存下来,要么完全回滚,全部不保留一致性事务完成或者撤销后,都应该处于一致的状态隔离性多个事务同时进行,它们之间应该互不干扰.应该防止一个事务处理其他事务也要修改的数据时,不合理的存取和不完整的读取数据永久性事务提交以后,所做的工作就被永久的保存下来在.NET中有几种事务处理方式?Oracle和SQL Server在开发上有哪些不同?答:1操作平台(Oracle可以在多平台上运行,而sql在Windows操作系统上操作)2.可操作性,易用性(Oracale在8i之前都是dos而sql有界面操作)3数据库管理(Oracle针对表空间管理,sql针对数据库管理)4.Oracle没有提供中文帮助文档,而sql提供5.Oracle的价格要远超于sql(sql是Oracle的十分之一不到)6.Oracle在Windows操作平台上只有2G空间,而sql就没有限制.但是sql不能运行在其他平台上XMLXML和HTML有什么区别?“可扩展标记语言”(xml) 提供一种描述结构化数据的方法。与主要用于控制数据的显示和外观的 html 标记不同,xml 标记用于定义数据本身的结构和数据类型。 xml 使用一组标记来描绘数据元素。每个元素封装可能十分简单也可能十分复杂的数据。您可以定义一组无限制的 xml 标记。例如,您可以定义一些 xml 标记来声明订单中的数据,如价格、税收、发货地址、帐单地址等等。由于 xml 标记在整个单位中以及跨单位采用,因此来自各种不同数据存储区的数据将更容易交换和操作。 xml 是一种简单、与平台无关并被广泛采用的标准。xml 相对于 html 的优点是它将用户界面与结构化数据分隔开来。这种数据与显示的分离使得集成来自不同源的数据成为可能。客户信息、订单、研究结果、帐单付款、病历、目录数据及其他信息都可以转换为 xml。 xml 与 html 以下是要记住的有关 xml 与 html 之间关系的几个要点: a. xml 不是要替换 html;实际上 xml 可以视作对 html 的补充。xml 和 html 的目标不同:html 的设计目标是显示数据并集中于数据外观,而 xml 的设计目标是描述数据并集中于数据的内容。 b. 与 html 相似,xml 不进行任何操作。虽然 xml 标记可用于描述订单之类的项的结构,但它不包含可用于发送或处理该订单以及确保按该订单交货的任何代码。其他人必须编写代码来实际对 xml 格式的数据执行这些操作。 c. 与 html 不同,xml 标记由架构或文档的作者定义,并且是无限制的。html 标记则是预定义的;html 作者只能使用当前 html 标准所支持的标记。XML操作相关的类有哪些?NET提供了直接读写XML文档的类型,所有读取类型的基类为XmlReader,而所有写入类型的基类为XmlWriterNET的DOM类型.NET中的文档对象模型是由XmlNode类型及其派生类型来实现的,所有这些类型覆盖了DOM中所有的元素类型。和XML读写类型不同,.NET中的DOM类型致力于在内存中完全构造一个XML文档,而不仅针对XML文档的读写操作。图10.4展示了常用DOM类型的类族继承结构。Javascript操作XML的方法?ADO.NET与XML如何转换?什么是RSS?如何实现RSS?Web Service什么是Web Service?WebService的主要目标是跨平台的可互操作性。为了达到这一目标,WebService完全基于XML(可扩展标记语言)、XSD(XMLSchema)等独立于平台、独立于软件供应商的标准,是创建可互操作的、分布式应用程序的新平台在构建和使用Web Service时,主要用到以下几个关键的技术和规则: 1.XML:描述数据的标准方法. 2.SOAP:表示信息交换的协议. 3.WSDL:Web服务描述语言. 4.UDDI(Universal Description, Discovery and Integration):通用描述、发现与集成,它是一种独立于平台的,基于XML语言的用于在互联网上描述商务的协议。Web Service有何优势?一优点(版本一)1、可操作的的分布式应用程序可以实现不同应用程序和在不同系统平台上开发出来的应用程序之间通信。与RMI、DOCM、CORBA最大的不同就是:Web Service 以 SOAP 作为基本通信协议从而避免了复杂的协议转换.2、普遍性、使用HTTP和XML进行通信任何支持HTTP和XML 技术的设备都可以拥有和访问Web Service,不同平台不同开发语言照样可以调用我们发布的Web Service.3、Web Service 甚至可以穿越防火墙,真正的自由通信一般要访问的Web服务器以及要访问的Web Service的客户端很可能位于防火墙后面,都默认关闭其它端口而开发HTTP端口,而Web service 正是基于HTTP的,所以它可以穿越防火墙.4、通过 SOAP 协议实现异地调用SOAP 是 Web Service 的基本通信协议,它是在分散或分布式环境中交换信息,它基于XML的协议,通过SOAP协议可以实现不同项目、不同地点、甚至异地调用应用程序如何在ASP.NET中创建Web Service?保证Web Service的安全有哪些措施?Ajax什么是Ajax?AJAX即“Asynchronous JavaScript and XML”(异步JavaScript和XML),AJAX并非缩写词,而是由Jesse James Gaiiett创造的名词,是指一种创建交互式网页应用的网页开发技术。通过 AJAX,您的 JavaScript 可使用 JavaScript 的 XMLHttpRequest 对象来直接与服务器进行通信。通过这个对象,您的 JavaScript 可在不重载页面的情况与 Web 服务器交换数据。Ajax技术的核心是什么? XHTML和CSS 使用文档对象模型(Document Object Model)作动态显示和交互 使用XML和XSLT做数据交互和操作 使用XMLHttpRequest进行异步数据接收 使用JavaScript将它们绑定在一Ajax的工作原理是什么?如何创建ASP.NET Ajax应用程序及常用控件?其他第三方Ajax组建有哪些?系统与文件操作获取系统信息有哪些类?获取系统服务信息需要哪个类?文件操作有哪几个类?注册表操作用到哪些类?Network.NET网络编程的常用类和方法有哪些?什么是Socket?Socket的基本通信过程是怎样的?实现异步Socket通信的关键步骤有哪些?TcpListener/TcpClient基本通信过程是怎样的?Windows ServiceWindows服务应用程序和普通的应用程序有什么不同?Windows服务中的Timer控件和普通Timer控件是否相同?如何安装和卸载Windows服务程序?如何调试Windows服务程序?WPF/WCF/LINQ.NET 2.0、.NET 3.0和.NET 3.5的区别?WPF技术是做什么用的?SOA是什么?WCF和SOA是什么关系?WCF的优势是什么?LINQ是什么技术?LINQ技术有什么好处?OO如何理解面向对象的思想?面向对象的设计与开发会有哪些好处?面向对象有哪些特点?实现多态有哪些方式?在什么情况下应用条件外置和反射技术?如何进行面向对象分析?面向对象设计有哪些原则?三层架构项目开发什么是三层架构?常用三层架构设计是什么?为什么要用三层结构?抽象工厂模式有什么作用?抽象工厂模式的思想方式是什么?条件外置及反射技术的实现是怎样的?大型网站的性能优化与安全一、压缩样式图片二、启动gzip 压缩三、减少不必要的页面元素、HTML静态化其实大家都知道,效率最高、消耗最小的就是纯静态化的html页面,所以我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。但是对于大量内容并且频繁更新的网站,我们无法全部手动去挨个实现,于是出现了我们常见的信息发布系统CMS,像我们常访问的各个门户站点的新闻频道,甚至他们的其他频道,都是通过信息发布系统来管理和实现的,信息发布系统可以实现最简单的信息录入自动生成静态页面,还能具备频道管理、权限管理、自动抓取等功能,对于一个大型网站来说,拥有一套高效、可管理的CMS是必不可少的。除了门户和信息发布类型的网站,对于交互性要求很高的社区类型网站来说,尽可能的静态化也是提高性能的必要手段,将社区内的帖子、文章进行实时的静态化,有更新的时候再重新静态化也是大量使用的策略,像Mop的大杂烩就是使用了这样的策略,网易社区等也是如此。同时,html静态化也是某些缓存策略使用的手段,对于系统中频繁使用数据库查询但是内容更新很小的应用,可以考虑使用html静态化来实现,比如论坛中论坛的公用设置信息,这些信息目前的主流论坛都可以进行后台管理并且存储再数据库中,这些信息其实大量被前台程序调用,但是更新频率很小,可以考虑将这部分内容进行后台更新的时候进行静态化,这样避免了大量的数据库访问请求。2、图片服务器分离大家知道,对于Web服务器来说,不管是Apache、IIS还是其他容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离,这是基本上大型网站都会采用的策略,他们都有独立的图片服务器,甚至很多台图片服务器。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃,在应用服务器和图片服务器上,可以进行不同的配置优化,比如apache在配置ContentType的时候可以尽量少支持,尽可能少的LoadModule,保证更高的系统消耗和执行效率。3、数据库集群和库表散列大型网站都有复杂的应用,这些应用必须使用数据库,那么在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列。在数据库集群方面,很多数据库都有自己的解决方案,Oracle、Sybase等都有很好的方案,常用的MySQL提供的Master/Slave也是类似的方案,您使用了什么样的DB,就参考相应的解决方案来实施即可。上面提到的数据库集群由于在架构、成本、扩张性方面都会受到所采用DB类型的限制,于是我们需要从应用程序的角度来考虑改善系统架构,库表散列是常用并且最有效的解决方案。我们在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,比如用户表,按照用户ID进行表散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。sohu的论坛就是采用了这样的架构,将论坛的用户、设置、帖子等信息进行数据库分离,然后对帖子、用户按照板块和ID进行散列数据库和表,最终可以在配置文件中进行简单的配置便能让系统随时增加一台低成本的数据库进来补充系统性能。4、缓存缓存一词搞技术的都接触过,很多地方用到缓存。网站架构和网站开发中的缓存也是非常重要。这里先讲述最基本的两种缓存。高级和分布式的缓存在后面讲述。架构方面的缓存,对Apache比较熟悉的人都能知道Apache提供了自己的缓存模块,也可以使用外加的Squid模块进行缓存,这两种方式均可以有效的提高Apache的访问响应能力。网站程序开发方面的缓存,Linux上提供的Memory Cache是常用的缓存接口,可以在web开发中使用,比如用Java开发的时候就可以调用MemoryCache对一些数据进行缓存和通讯共享,一些大型社区使用了这样的架构。另外,在使用web语言开发的时候,各种语言基本都有自己的缓存模块和方法,PHP有Pear的Cache模块,Java就更多了,.net不是很熟悉,相信也肯定有。5、镜像镜像是大型网站常采用的提高性能和数据安全性的方式,镜像的技术可以解决不同网络接入商和地域带来的用户访问速度差异,比如ChinaNet和EduNet之间的差异就促使了很多网站在教育网内搭建镜像站点,数据进行定时更新或者实时更新。在镜像的细节技术方面,这里不阐述太深,有很多专业的现成的解决架构和产品可选。也有廉价的通过软件实现的思路,比如Linux上的rsync等工具。6、负载均衡负载均衡将是大型网站解决高负荷访问和大量并发请求采用的终极解决办法。负载均衡技术发展了多年,有很多专业的服务提供商和产品可以选择,我个人接触过一些解决方法,其中有两个架构可以给大家做参考。硬件四层交换第四层交换使用第三层和第四层信息包的报头信息,根据应用区间识别业务流,将整个区间段的业务流分配到合适的应用服务器进行处理。第四层交换功能就象是虚IP,指向物理服务器。它传输的业务服从的协议多种多样,有HTTP、FTP、NFS、Telnet或其他协议。这些业务在物理服务器基础上,需要复杂的载量平衡算法。在IP世界,业务类型由终端TCP或UDP端口地址来决定,在第四层交换中的应用区间则由源端和终端IP地址、TCP和UDP端口共同决定。在硬件四层交换产品领域,有一些知名的产品可以选择,比如Alteon、F5等,这些产品很昂贵,但是物有所值,能够提供非常优秀的性能和很灵活的管理能力。Yahoo中国当初接近2000台服务器使用了三四台Alteon就搞定了。软件四层交换大家知道了硬件四层交换机的原理后,基于OSI模型来实现的软件四层交换也就应运而生,这样的解决方案实现的原理一致,不过性能稍差。但是满足一定量的压力还是游刃有余的,有人说软件实现方式其实更灵活,处理能力完全看你配置的熟悉能力。软件四层交换我们可以使用Linux上常用的LVS来解决,LVS就是Linux Virtual Server,他提供了基于心跳线heartbeat的实时灾难应对解决方案,提高系统的鲁棒性,同时可供了灵活的虚拟VIP配置和管理功能,可以同时满足多种应用需求,这对于分布式的系统来说必不可少。一个典型的使用负载均衡的策略就是,在软件或者硬件四层交换的基础上搭建squid集群,这种思路在很多大型网站包括搜索引擎上被采用,这样的架构低成本、高性能还有很强的扩张性,随时往架构里面增减节点都非常容易。这样的架构我准备空了专门详细整理一下和大家探讨。对于大型网站来说,前面提到的每个方法可能都会被同时使用到,我这里介绍得比较浅显,具体实现过程中很多细节还需要大家慢慢熟悉和体会,有时一个很小的squid参数或者apache参数设置,对于系统性能的影响就会很大,希望大家一起讨论,达到抛砖引玉之效。如何提高代码的效率和性能?1foreach VS for 语句2避免使用ArrayList3使用HashTable字典集合4为字符串容器声明常量5使用String.Compare对字符串进行比较6使用StringBuilder进行字符串拼接7如何正确使用XMLDocument与 XPathDocument读取XML文件8避免在循环体声明变量9避免使用System.Exception捕获异常10不要用Exception控制程序流程11使用using 和 try/finally释放资源12如何避免滥用反射13使用值类型的ToString方法避免装箱操作foreach VS for 语句Foreach 要比for具有更好的执行效率Foreach的平均花费时间只有for的30%.通过测试结果在for和foreach都可以使用的情况下,我们推荐使用效率更高的foreach另外,用for写入数据时间大约是读取数据时间的10倍左右.避免使用ArrayListArrayList的性能低下任何对象添加到ArrayList中都要封箱为System.Object从ArrayList中取出数据都要拆箱回实际的类型泛型集合类的高性能泛型集合是强类型的使用HashTable字典集合当存放少量数据时建议使用HashTable取代像StringDictionary,NameValueCollection, HybridCollection这样的字典集合为字符串容器声明常量为字符串容器声明常量,不要直接把字符串封装在双引号”中,避免字符串对象不断在内存中创建和释放.提高字符串对象的访问效率./避免MyObject obj = new MyObject();obj.Status = “Active”;/推荐const string c = “Acive”;MyObject obj = new MyObject();obj.Status = c;使用String.Compare()字符串比较不要使用UpperCase或LowerCase转换字符串的大小写,再进行比较使用String.Compare()可忽略字符串大小写进行比较String strTemp = “Active”;If(String.Compare(strTemp,”active”,true)=0) Consolt.Write(“Equal”);使用StringBuilder字符串拼接1.String类对象是不可变的(只读),对于String对象的重新赋值,本质是重新创建一个新的String对象并赋予新值给该对象.2.System.Text.StringBuilder维护一个长度等于Capacity的字符串(可以看作字符数组),当Capacity长度的字符串不足以容纳结果字符串时,StringBuilder开辟新的长度为经过上面的规则计算好的Capacity的内存区域,将原字符串复制到新的内存区域再进行操作,原字符串区域交给GC回收。因此这里也涉及到内存的分配与回收,使用StringBuilder时最好估算一下所需容量,用这个容量初始化Capacity,提高性能。StringBuilder不能保证所有实例成员都是线程安全的,尽管在类型定义中加入了很多线程安全的控制,如果要确保其线程安全,须手工实现线程同步机制。XPathDocument读取XML文件如果只是读取XML对象的数据,那么用只读的XPathDocument代替XMLDocument,可以提高性能循环体 变量避免在循环体里声明变量,应该在循环体外声明变量,在循环体内初始化变量/避免For(int i=0;i10;i+) SomeClass obj = new SomeClass(); /推荐SomeClass obj = null;For(int i=0; i10; i+) obj = new SomeClass(); /捕获指定的异常捕获异常时,应使用具体的异常类进行捕获,并按照异常所捕获得范围按照由小到大的顺序进行定义不要使用通用的System.ExceptionPrivate void Find(object obj) try Console.write(obj.ToString(); catch(ArgumentNullException ane) / catch(ArgumentException ae) / catch(SystemException se) / catch(Exception e) / 不要使用Exception控制流程捕获异常对性能的损耗是众所周知的.因此最好能够避免异常的发生/错误的写法Try result = 100/num; Catch(Exception e) result = 0; /正确的写法If(num !=0) result = 100/num;Else result = 0;使用using和try/finally清理资源.NET 平台在内存管理方面提供了GC(Garbage Collection),负责自动释放托管资源和内存回收的工作,但它无法对非托管资源进行释放,这时我们必须自己提供方法来释放对象内分配的非托管资源使用非托管资源的类型必须实现IDisposable接口的Dispose方法来精确的释放资料当使用带有Dispose方法的类型化资源时,应在使用完毕时调用Dispose方法,及时释放掉不用的资源.使用using或try/finally能更好的保证Dispose方法被及时的调用避免滥用反射反射是比较浪费性能的操作,应避免滥用反射影响性能的原因:当使用反射来调用类型或触发方法,访问字段属性时,CLR需要做更多的工作:校验参数,检查权限等.当编写一个动态构造类型(晚绑定)的应用时,可采取以下方式进行替换通过类的继承关系通过接口实现通过委托实现避免装箱操作使用值类型的ToString方法避免装箱操作原因:数字和字符串拼接的时候,因为数据类型不同,数字通过装箱操作转换为引用类型后才能与字符串进行拼接./建议int num=5;string str = “link me”+num.ToString();HttpServerUtility.Transfer 采用 Server.Transfer 语法,在页面中使用该方法可避免不必要的客户端重定向(Response.Redirect)。Int32.TryParse()类型转化Int32.TryParse(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论