《Effective C#》Part II:第二部分总结

优快云第一期总结之三:Thread的问题 C#是一门支持多线程的语言,因此线程的使用也是比较常见的。由于线程的知识在Win32编程的时候已经说得过多,所以在.Net中很少介绍这部分(可能.Net不觉得这部分是它所特有的)。 那么线程相关的问题大致有如下四类(这篇文章只讨论单线程、单线程与UI线程这两方面的问题)。问题一,线程的基本操作,例如:暂停、继续、停止等;问题二,如何向线程传递参数或者从中得到其返回值;问题三,如 阅读详情

第二部的主题在于资源管理,.Net编写的程序以托管程序居多,但是并不意味着可以不注意细节,合理的使用.Net提供的便利,加上好的习惯,有利于程序效率提高。

 

这部分包括7个单元,分别如下:

Item 12: Prefer Variable Initializers to Assignment Statements

《Effective C#》Item 12:推荐使用成员初始化语句

http://blog.youkuaiyun.com/Knight94/archive/2006/09/01/1153251.aspx

 

Item 13: Initialize Static Class Members with Static Constructors

《Effective C#》Item 13:使用静态构造函数初始化静态成员

http://blog.youkuaiyun.com/Knight94/archive/2006/09/05/1178917.aspx

 

Item 14: Utilize Constructor Chaining

《Effective C#》Item 14:使用构造函数初始化语句

http://blog.youkuaiyun.com/Knight94/archive/2006/09/05/1179030.aspx

 

Item 15: Utilize using and try/finally for Resource Cleanup

《Effective C#》Item 15:利用using和try-finally来释放资源

http://blog.youkuaiyun.com/Knight94/archive/2006/10/08/1326302.aspx

 

Item 16: Minimize Garbage

《Effective C#》Item 16:尽量减少垃圾产生的数量

http://blog.youkuaiyun.com/Knight94/archive/2006/10/08/1326319.aspx

 

Item 17: Minimize Boxing and Unboxing

《Effective C#》Item 17:减少装箱(Boxing)和拆箱(Unboxing)操作

http://blog.youkuaiyun.com/Knight94/archive/2006/10/08/1326326.aspx

 

Item 18: Implement the Standard Dispose Pattern

《Effective C#》Item 18:Dispose函数的标准实现模式

http://blog.youkuaiyun.com/Knight94/archive/2006/10/10/1329214.aspx

 

 
如何弹出一个模式窗口来显示进度条 最近看了好多人问这方面的问题,以前我也写过一篇blog,里面说了如何在子线程中控制进度条。但目前大多数环境,需要弹出模式窗口,来显示进度条,那么只需要在原先的基础上稍作修改即可。 首先是进度条窗体,需要在上面添加进度条,然后去掉ControlBox。除此外,还要增加一个方法,用来控制进度条的增加幅度,具体如下:    ///     /// Increase process bar 阅读详情

相关推荐

如何用C#做一个悬浮窗口程序

用C#做一个像FlashGet的悬浮窗口,其实很简单,不像以前需要调用很多系统API。大致的步骤如下。 首先是主窗体部分,即要判断窗体的状态来决定是否显示悬浮窗口。局部成员声明:    private FormWindowState fwsPrevious;    private frmTopMost myTopMost; 主窗体的Load事件:    privat

愚翁专栏 3万+

Net 内存溢出(System.OutOfMemoryException)的常见情况和处理方式总结

在什么情况下会出现OutOfMemonryException呢? 在我们试图新建一个对象时,而垃圾收集器又找不到任何可用内存时被抛出,这种情况下我们是可以捕获该异常的; 另一种情况是,CLR需要内存时,而却系统却不能提供,也会抛出该异常. 但此时,我们的应用程序是不能捕获该错误的. 内存溢出(OutOfMemoryException)的调试分析 32位操作系统的寻址空间是4G,其中有2G被操作...

weixin_30384217的博客 6971

如何在MDI中使子窗体只保留一个实例

由于在MDI中,子窗体会很多,那么在我以前一篇文章中所提到的方法就有些繁琐了。为了能适应多个子窗体,并对于每个子窗体只保留一个实例,那么我就用一个新的方法来替换,即用反射方法来作处理。 大致代码如下。首先是通过子窗体类型名来判断是否打开新的子窗体,还是把原有的子窗体进行显示。    using System.Reflection;    ///     /// Open c

愚翁专栏 1万+

《Effective C#》Item 2:定义常量的两种方法

在C#中定义常量的方式有两种,一种叫做静态常量(Compile-time constant),另一种叫做动态常量(Runtime constant)。前者用“const”来定义,后者用“readonly”来定义。 对于静态常量(Compile-time constant),它的书写方式如下:public const int MAX_VALUE = 10;为什么称它为静态常量呢,因为

愚翁专栏 6099

SOLIDWORKS转CAD字体终极选择:TrueType vs SHX,哪个才是你图纸协作的“安全牌”?

本文深入探讨SOLIDWORKS转CAD工程图中的字体选择问题,对比TrueType与SHX字体在DWG文件协作中的表现。通过真实案例揭示字体映射的兼容性陷阱,提供企业级字体管理方案,帮助工程师规避版本差异、系统依赖和法律风险,确保图纸协作的稳定性。

weixin_34233974的博客 264

PySide6多线程避坑大全:信号槽崩溃、内存泄漏,这些雷我都帮你踩过了

本文深入探讨了PySide6多线程开发中的常见问题与解决方案,包括信号槽崩溃、内存泄漏等典型陷阱。通过实战案例和优化策略,帮助开发者避免UI线程操作错误、有效管理资源生命周期,并提升跨线程通信的可靠性。特别针对PySide6多线程特性,提供了线程安全日志、死锁检测等实用调试技巧。

weixin_32288959的博客 396

Unity ARFoundation手势旋转3D模型:从原理到C#实现与优化

在移动应用和AR/VR开发中,3D模型的自然交互是提升用户体验的关键技术之一。其核心原理在于将二维触摸屏输入映射为三维空间中的旋转变换,这涉及到坐标转换、旋转轴计算和帧率无关的动画处理。这项技术的工程价值在于能够创建直观、沉浸式的操作体验,特别适用于产品展示、教育模拟和游戏等场景。通过Unity的ARFoundation框架,开发者可以高效实现跨平台的AR应用,其中手势旋转功能是交互设计的重点。本文聚焦于单指旋转方案的实现,详细解析了触摸输入处理、惯性模拟和参数调优等实践细节,并针对AR环境下的性能优化和常

weixin_34056162的博客 357

Win10管理员权限的‘暗门’:从mmc.exe被阻止,聊聊UAC与自动提权那些事儿

本文深入解析Windows 10中UAC(用户账户控制)与自动提权机制,探讨mmc.exe被阻止的深层原因及解决方案。从UAC工作原理到自动提权机制,再到具体诊断与修复步骤,帮助用户理解并解决权限管理问题,同时平衡安全性与便利性。

weixin_30521161的博客 419

转载:《Effective C#》Part II:第二部分总结

第二部的主题在于资源管理,.Net编写的程序以托管程序居多,但是并不意味着可以不注意细节,合理的使用.Net提供的便利,加上好的习惯,有利于程序效率提高。 这部分包括7个单元,分别如下: Item 12: Prefer Variable Initializers to Assignment Statements 《Effective C#》Item 12:推荐使用成员初始...

weixin_30297281的博客 104

控制障碍函数(Control Barrier Function,CBF) 一、定义

介绍控制障碍函数

Lyajpunov的博客 2万+

Altium Designer差分走线实战:从规则设置到阻抗匹配的完整流程

本文详细讲解了在Altium Designer中进行差分走线的完整实战流程,涵盖从原理图定义差分对、PCB布局管理、关键设计规则设置,到利用阻抗计算工具确定线宽与间距,以及布线技巧与等长处理等核心步骤。文章旨在帮助工程师掌握高速PCB设计中差分信号传输的关键技术,确保信号完整性并实现精确的阻抗匹配。

weixin_29163857的博客 255

全文 - Building AI Coding Agents for the Terminal: Scaffolding, Harness, Context Engineering, and Less

AI 编程辅助的格局正在经历一场根本性转变:从复杂的 IDE 插件转向通用的、终端原生的智能体(agent)。直接在开发者管理源代码版本控制、执行构建和部署环境的终端中运行,基于 CLI 的智能体为长程开发任务提供了前所未有的自主性。本文介绍OpenDev——一个专为这一新范式打造的开源命令行编程智能体。有效的自主辅助需要严格的安全控制和高效的上下文管理,以防止上下文膨胀和推理退化。

eloudy的专栏 453

避开命令行!在VMware vCenter 8.0图形化界面里搞定SSL证书续期全流程

本文详细介绍了在VMware vCenter 8.0图形化界面中完成SSL证书续期的全流程,包括计算机SSL证书、VMCA根证书和STS证书的管理。通过可视化操作,管理员无需使用命令行即可高效处理证书问题,确保vSphere环境的稳定运行。文章还提供了证书监控与预警配置的实用技巧,帮助用户提前规避证书过期风险。

weixin_27051161的博客 282

如何用C#写一个简单的Login窗口

最近,看到网上经常会问如何进行窗口跳转,大多数的问题都是牵扯到Login窗口。其实,在Visual Studio 6以来,比较正确的做法,是判断Login窗口的返回值,然后决定是否打开主窗体,那么在C#中也是一样的。 具体做法如下:首先,创建Login窗口,然后添加相应的输入框和按钮,设置窗口的AcceptButton为窗体的确认按钮,而CancelButton为窗体的取消按钮。例

愚翁专栏 4万+

Fortify SCA 24.4 最新可用版

Fortify Static Code Analyzer(Fortify SCA) 是一款由 Micro Focus(原惠普旗下)开发的 静态应用安全测试(SAST)工具,专注于在软件开发早期通过分析源代码或编译后的二进制文件,识别潜在的安全漏洞、代码缺陷和合规性问题。以下是其核心特点与功能:核心功能 静态代码分析 在不运行程序的情况下,通过语法、语义分析检测代码中的安全漏洞(如 SQL 注入、跨站脚本(XSS)、缓冲区溢出等)和代码质量问题。

棉花糖的博客 3181

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

【Proteus仿真】74HC595+74LS154驱动显示16X16点阵

perseverance51博客 2892

优快云第一期总结之一:Form问题

Form问题是最基本的问题,因为编写WinApp程序首先接触的对象就是它,因此在论坛中对它而产生的问题也最常见。 与Form相关的常见问题大致分为如下的四类问题。第一类问题:如何控制窗体的显示顺序;第二类问题:窗体之间的对象如何相互引用或操作;第三类问题:如何处理窗体唯一性问题;最后一个问题:如何合理的关闭窗体或程序。 接下来先说说如何控制窗体的显示顺序。很多编

愚翁专栏 3万+

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

如何在子线程中操作窗体上的控件

一般来说,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供了Invoke的方法,其作用就是让子线程告诉窗体线程来完成相应的控件操作。 现在用一个用线程控制的进程条来说明,大致的步骤如下:1.  创建Invoke函数,大致如下:     

愚翁专栏 3万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

浅谈C#托管程序中的资源释放问题

终于开始动手写这篇文章了,有个网友催了我好几次,今天终于可以静下心来完成它。 便于对文章的开展,需要先明确两个概念。第一个就是很多人用.Net写程序,会谈到托管这个概念。那么.Net所指的资源托管到底是什么意思,是相对于所有资源,还是只限于某一方面资源?很多人对此不是很了解,其实.Net所指的托管只是针对内存这一个方面,并不是对于所有的资源;因此对于Stream,数据库的连接,GDI+

愚翁专栏 2万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

主窗体和子窗体之间如何相互操作对方的控件

很多人都苦恼于如何在子窗体中操作主窗体上的控件,或者在主窗体中操作子窗体上的控件。相比较而言,后面稍微简单一些,只要在主窗体中创建子窗体的时候,保留所创建子窗体对象即可。 下面重点介绍前一种,目前常见的有两种方法,基本上大同小异:第一种,在主窗体类中定义一个静态成员,来保存当前主窗体对象,例如:        public static yourMainWindow pCurren

愚翁专栏 2万+

如何用C#获得文件信息以及扩展信息

在C#中获得文件信息很容易,只需要用FileInfo类或者FileVersionInfo类就可以获得,但是如果想要获得文件的扩展信息,则无法从这两类来获得。不过在C#中,这也不是件难事,只要引入“Microsoft Shell Controls and Automation”这个COM就可以获得。 接下来就分别来介绍。首先介绍FileInfo类,这个类非常简单,首先需要根据文件名来创建

愚翁专栏 2万+

如何使自己的程序只运行一次

我介绍两个主流的方法。方法一:使用Mutex来进行1.  首先要添加如下的namespace:using System.Threading; 2.  修改系统Main函数,大致如下:        bool bCreatedNew;                //Create a new mutex using specific mutex name    

愚翁专栏 2万+

如何解决WebService参数传递中文的问题

很多人在调用WebService所提供方法的时候,发现如果当字符串中含有中文,传到WebService端就发现是乱码,这是由于WebService默认的编码是“UTF-8”,当调用端和接收端用不同编码进行转换的时候,就会出现此类问题,如何解决这类问题呢,具体要根据你的环境而定。 如果WebService的代码是你可控的,那么修改起来很简单,只需要把WebService工程中的web.con

愚翁专栏 2万+

如何在数据库中保存不同类型的文件

其实,向数据库中保存不同类型的文件,和在数据库中保存图片是一样的。就是向数据库以byte形式存入。以下就简单举例说明: 首先,在数据库中要建立相应的字段能保存Bytes,例如在SQL Server中用Image类型来定义字段。我所用到的数据库大致结构如下: 字段名

愚翁专栏 1万+

如何用C#创建Windows Service

在.Net中用C#创建Windows Service,其实很简单,按照以下的步骤就可以做出一个简单的Windows Service。1.首先在创建工程的时候选择Windows Service,这样.Net会自动生成Windows Service的框架;2.完成Windows Service的相应事件,主要是OnStart和OnStop这两个事件,完成后大致代码如下:using Syst

愚翁专栏 1万+
上一篇: 《Effective C#》Item 18:Dispose函数的标准实现模式
下一篇: 借助WebService实现多线程上传文件
Knight94
博客等级 码龄25年 1013粉丝 87原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值