C#/.NET易错的几点【C#.Net教程】,csharp,.NET,.net
作者:搜教程发布时间:2019-11-27分类:.Net教程浏览:29评论:0
导读:1实时开释资本CLR托管环境扮演了垃圾接纳的角色,所以你不须要显式开释已建立对象所占用的内存。但这不意味着你能够疏忽一切的运用过的对象。很多对象封装了其他范例的体系资本(...
1 实时开释资本
CLR托管环境扮演了垃圾接纳的角色,所以你不须要显式开释已建立对象所占用的内存。但这不意味着你能够疏忽一切的运用过的对象。很多对象封装了其 他范例的体系资本(比方,磁盘文件,数据衔接,收集端口)。坚持这些资本的运用状况会急剧的耗尽体系的资本,减弱机能而且终究致使顺序失足。当你翻开一个 文件、收集端口或许数据衔接时,当你不再运用这些资本时,应当尽快显式开释这些资本。
别的针对资本的操纵,平常须要增添非常捕捉处置惩罚(Try..Catch),这时刻别忘记在finally中举行资本开释,以确保在捕捉非常时也能够一般开释资本。
2 准确住手多线程
FileStream fs = File.Open(…);
Try{…} Finally{ fs.Close;}
假定如上代码在事情线程中,已举行到finally内里,这个时刻UI线程挪用了该线程的Abort()要领,则很有能够fs.Close还没有实行的时刻,事情线程跳出finally代码块了。如许你的fs就永久不会被Close了。
大多数情况下,finally会永久被被实行,但不包含挪用Thread.Abort所激发的ThreadAbortException非常,鉴于此来由,不发起运用Abort。
要准确住手线程,不在于挪用者采纳了什么行动(不要直接运用Thread.Abort()),而更多依靠于事情线程是否能主动相应挪用者的住手要求。
大致机制是,如果线程须要被住手,那末线程自身就应当担任给挪用者开放Cancel的接口。
3 范例转换相干
如果从数据库中读取某个值,有数据时是int范例,没有数据的话获取到的是null,范例强转则会非常。所以平常很罕用强转,用的话也必需做一个非常捕捉,防止顺序非常。
在强转不好的情况下,我们发起运用TryParse要领,该要领已对Parse要领举行了非常处置惩罚。
也能够用Convert,一样须要举行非常捕捉;实在,通常触及到范例转换,序列化等操纵的处所,都须要捕捉非常;
4 字符串操纵题目
在对字符串操纵中,若触及大批拼接操纵发起运用StringBuilder。若运用String会带来显著的机能消耗。缘由在于string对象是 个很迥殊的对象,它一旦被赋值就不可转变。在运转时挪用String类中任何拼接操纵(如赋值、”+”等),都邑在内存中建立一个新的字符串对象,也意味 着要为该新对象分派新的内存空间。
5 const常量修正致使的题目
当顺序援用其他dll中的const常量时要迥殊引发注重。
若修正了此dll中的const常量后,要从新编译援用了此dll中这个const常量的一切顺序,不然顺序中运用的这个常量值将和dl中的不一致。
别的如果运用readonly替代const能够处理这个题目,不须要从新编译,由于const是编译型常量,而readonly是运转时常量。
6 C#编译目的平台题目
当顺序依靠的dll的编译的目的平台是X86,则顺序自身的编译目的平台也必需是X86(而不是默许选项Any CPU),不然64位电脑将没法运转。
7 跨线程接见控件
在开辟界面顺序时,会碰到比较耗时的操纵,为了顺序的友好性,我们平常会在使命线程中实行耗时操纵,并将实行信息显现在主UI线程。
如果直接在使命线程中操纵主UI线程中的控件,如许极易涌现非常,报“不能在其他线程中修正建立控件线程的值”,如果设置了制止编译器对跨线程接见做搜检,就不会报错,然则会涌现没法预知的题目。此时发起采纳托付或匿名托付的体式格局完成。
CLR托管环境扮演了垃圾接纳的角色,所以你不须要显式开释已建立对象所占用的内存。但这不意味着你能够疏忽一切的运用过的对象。很多对象封装了其 他范例的体系资本(比方,磁盘文件,数据衔接,收集端口)。坚持这些资本的运用状况会急剧的耗尽体系的资本,减弱机能而且终究致使顺序失足。当你翻开一个 文件、收集端口或许数据衔接时,当你不再运用这些资本时,应当尽快显式开释这些资本。
别的针对资本的操纵,平常须要增添非常捕捉处置惩罚(Try..Catch),这时刻别忘记在finally中举行资本开释,以确保在捕捉非常时也能够一般开释资本。
2 准确住手多线程
FileStream fs = File.Open(…);
Try{…} Finally{ fs.Close;}
假定如上代码在事情线程中,已举行到finally内里,这个时刻UI线程挪用了该线程的Abort()要领,则很有能够fs.Close还没有实行的时刻,事情线程跳出finally代码块了。如许你的fs就永久不会被Close了。
大多数情况下,finally会永久被被实行,但不包含挪用Thread.Abort所激发的ThreadAbortException非常,鉴于此来由,不发起运用Abort。
要准确住手线程,不在于挪用者采纳了什么行动(不要直接运用Thread.Abort()),而更多依靠于事情线程是否能主动相应挪用者的住手要求。
大致机制是,如果线程须要被住手,那末线程自身就应当担任给挪用者开放Cancel的接口。
3 范例转换相干
如果从数据库中读取某个值,有数据时是int范例,没有数据的话获取到的是null,范例强转则会非常。所以平常很罕用强转,用的话也必需做一个非常捕捉,防止顺序非常。
在强转不好的情况下,我们发起运用TryParse要领,该要领已对Parse要领举行了非常处置惩罚。
也能够用Convert,一样须要举行非常捕捉;实在,通常触及到范例转换,序列化等操纵的处所,都须要捕捉非常;
4 字符串操纵题目
在对字符串操纵中,若触及大批拼接操纵发起运用StringBuilder。若运用String会带来显著的机能消耗。缘由在于string对象是 个很迥殊的对象,它一旦被赋值就不可转变。在运转时挪用String类中任何拼接操纵(如赋值、”+”等),都邑在内存中建立一个新的字符串对象,也意味 着要为该新对象分派新的内存空间。
5 const常量修正致使的题目
当顺序援用其他dll中的const常量时要迥殊引发注重。
若修正了此dll中的const常量后,要从新编译援用了此dll中这个const常量的一切顺序,不然顺序中运用的这个常量值将和dl中的不一致。
别的如果运用readonly替代const能够处理这个题目,不须要从新编译,由于const是编译型常量,而readonly是运转时常量。
6 C#编译目的平台题目
当顺序依靠的dll的编译的目的平台是X86,则顺序自身的编译目的平台也必需是X86(而不是默许选项Any CPU),不然64位电脑将没法运转。
7 跨线程接见控件
在开辟界面顺序时,会碰到比较耗时的操纵,为了顺序的友好性,我们平常会在使命线程中实行耗时操纵,并将实行信息显现在主UI线程。
如果直接在使命线程中操纵主UI线程中的控件,如许极易涌现非常,报“不能在其他线程中修正建立控件线程的值”,如果设置了制止编译器对跨线程接见做搜检,就不会报错,然则会涌现没法预知的题目。此时发起采纳托付或匿名托付的体式格局完成。
以上就是C#/.NET易错的几点的细致内容,更多请关注ki4网别的相干文章!
相关推荐
- mysql装置后.net顺序运转失足怎样处理【MySQL教程】,mysql,.net,运行
- .net读写xml文档详解【XML教程】,.net,xml
- .net和c#有什么区别【C#.Net教程】,.net,c#
- C#中VB.NET给Word文档增加/打消书签的实例【C#.Net教程】,VB.NET,csharp,Word
- C#怎样完成loading提醒控件简朴的实例【C#.Net教程】,loading,csharp,.net
- C#怎样完成增加和修正以及删除PDF书签的要领引见【C#.Net教程】,csharp,.net,以及
- C#怎样运用LibUsbDotNet完成USB通讯的示例详解【C#.Net教程】,LibUsbDotNet,csharp,.net
- 运用 VSCode 编写 .NET Core 项目的实例教程【C#.Net教程】,VSCode,Core,.NET,编写,使用
- asp .net 面试题及答案分享【C#.Net教程】,.net,自己,整理,问题,面试
- C#高等编程(一)-.NET体系结构【C#.Net教程】,C#,.NET,体系结构
你 发表评论:
欢迎- .Net教程排行
-
- 1案例分享c++ map的运用和 查找机能测试【C#.Net教程】,性能,map,c++
- 2细致引见C# string花样的日期时候字符串转为DateTime范例的要领【C#.Net教程】,C#,string,DateTime
- 3详解ASP.NET中衔接数据库设置要领【C#.Net教程】,ASP.NET,数据库,配置
- 4c#怎样运用?c#的基础语法【C#.Net教程】,c#,关键字
- 5C# DataSet机能最好实践【C#.Net教程】,C#,DataSet
- 6C#_挪用封装的一个类完成导出Excel表格的功用【C#.Net教程】,C# Excel表格
- 7asp .net 面试题及答案分享【C#.Net教程】,.net,自己,整理,问题,面试
- 8让WebAPI 返回JSON花样的数据实例教程【C#.Net教程】,javascript,WebAPI,JSON,api,web,搭建,返回
- 9.net和c#有什么区别【C#.Net教程】,.net,c#
- 最新文章
- 广而告之