C#/.NET易错的几点
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线程中的控件,这样极易出现异常,报“不能在其他线程中修改创建控件线程的值”,如果设置了禁止编译器对跨线程访问做检查,就不会报错,但是会出现无法预知的问题。此时建议采用委托或匿名委托的方式实现。
以上是C#/.NET易错的几点的详细内容。更多信息请关注PHP中文网其他相关文章!

热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

Video Face Swap
使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热门文章

热工具

记事本++7.3.1
好用且免费的代码编辑器

SublimeText3汉化版
中文版,非常好用

禅工作室 13.0.1
功能强大的PHP集成开发环境

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)

热门话题

当今人工智能(AI)技术的发展如火如荼,它们在各个领域都展现出了巨大的潜力和影响力。今天大姚给大家分享4个.NET开源的AI模型LLM相关的项目框架,希望能为大家提供一些参考。https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel是一种开源的软件开发工具包(SDK),旨在将大型语言模型(LLM)如OpenAI、Azure

如果你是一名.NET开发者,你必须意识到在交付高质量软件方面,优化功能和性能的重要性。通过熟练使用提供的资源并减少网站加载时间,你不仅为用户创造了愉快的体验,还能减少基础设施成本。

在高并发请求处理方面,.NETASP.NETCoreWebAPI性能优于JavaSpringMVC,原因包括:AOT提前编译,减少启动时间;更精细的内存管理,由开发人员负责分配和释放对象内存。

C#.NET面试问题和答案包括基础知识、核心概念和高级用法。1)基础知识:C#是微软开发的面向对象语言,主要用于.NET框架。2)核心概念:委托和事件允许动态绑定方法,LINQ提供强大查询功能。3)高级用法:异步编程提高响应性,表达式树用于动态代码构建。

C#高级开发者面试需要掌握异步编程、LINQ、.NET框架内部工作原理等核心知识。1.异步编程通过async和await简化操作,提升应用响应性。2.LINQ以SQL风格操作数据,需注意性能。3..NET框架的CLR管理内存,垃圾回收需谨慎使用。

C#是一种现代、面向对象的编程语言,由微软开发并作为.NET框架的一部分。1.C#支持面向对象编程(OOP),包括封装、继承和多态。2.C#中的异步编程通过async和await关键字实现,提高应用的响应性。3.使用LINQ可以简洁地处理数据集合。4.常见错误包括空引用异常和索引超出范围异常,调试技巧包括使用调试器和异常处理。5.性能优化包括使用StringBuilder和避免不必要的装箱和拆箱。

C#.NETisversatileforbothwebanddesktopdevelopment.1)Forweb,useASP.NETfordynamicapplications.2)Fordesktop,employWindowsFormsorWPFforrichinterfaces.3)UseXamarinforcross-platformdevelopment,enablingcodesharingacrossWindows,macOS,Linux,andmobiledevices.
