C#拾遗

JerryXia 发表于 , 阅读 (4,599)
C#拾遗1.1 垃圾回收1.1.1 避免不必要的对象创建1.1.2 不要使用空析构函数 ★1.1.3 实现 IDisposable 接口1.2 String 操作1.2.1 使用 StringBuilder 做字符串连接1.2.2 避免不必要的调用ToUpper或ToLower方法1.2.3 最快的空串比较方法1.3 多线程1.3.1 线程同步1.3.2 使用ThreadStatic替代NameDataSlot ★1.3.3 多线程编程技巧1.4 类型系统... 阅读全文

网络编程基础知识-通信模型

JerryXia 发表于 , 阅读 (1,921)
动手学习TCPc# UDP服务器一直对BIO、NIO、AIO不太理解,特别是阻塞与异步的区别。Google了一下,一篇文章中的4张图很形象的表述了4种IO模型的原理和区别,收藏一下。首先,贴一张表示四种IO模型的图:同步阻塞IO:同步非阻塞IO:异步阻塞IO:异步非阻塞IO:关于同步和异步的例子:老张爱喝茶,废话不说,煮开水。出场人物:老张,水壶两把(普通水壶,简称水壶;会响的水壶,简称响水壶)。老张把水壶放到火上,立等水开。(同步阻塞) 老张觉得自己有点傻老张把水壶放到火上,去客厅看... 阅读全文

压缩Asp.Net的响应流节省带宽

JerryXia 发表于 , 阅读 (2,090)
现在,我们实现一个HttpModule来压缩Asp.Net的响应流,下面是代码示例using System; using System.IO; using System.IO.Compression; using System.Globalization; using System.Web; public class JsonCompressionModule : IHttpModule { public JsonCompressionModule() { } ... 阅读全文

规范C#代码的命名

JerryXia 发表于 , 阅读 (1,860)
本文结合我自己的开发经验,总结出若干命名规则,这些命名规则纯属个人的使用习惯,不代表是一种理想的规则,在这里列举出来,仅供参考。1.切忌使用拼音,甚至是拼音首字母组合:cishu =5; // 循环的次数 zzje = 1000.00 // 转账金额 2.要使用英文,而且要使用准确的英语,无论是拼写还是语法:名词单数,必须使用单数英文,如Account、Customer。对于数组,列表等对象集合的命名,必须使用复数,而且最好按照英文的语法基础知识使用准确的复数形式,如 List<Ac... 阅读全文

.Net内存回收相关:析构函数、Finalize

JerryXia 发表于 , 阅读 (2,128)
对于您的应用程序创建的大多数对象,可以依靠 .NET Framework的垃圾回收器隐式地执行所有必要的内存管理任务。但是,在您创建封装非托管资源的对象时,当您在应用程序中使用完这些非托管资源之后,您必须显式地释放它们。 最常见的一类非托管资源就是包装操作系统资源的对象,例如文件、窗口或网络连接。虽然垃圾回收器可以跟踪封装非托管资源的对象的生存期,但它不了解具体如何清理这些资源。对于这些类型的对象,.NET Framework提供Object.Finalize方法,它允许对象在垃圾回收器回... 阅读全文

实现IDisposable接口最佳方式

JerryXia 发表于 , 阅读 (2,011)
Finalize可以通过垃圾回收进行自动的调用,而Dispose需要被代码显示的调用,所以,为了保险起见,对于一些非托管资源,还是有必要实现终结器的。也就是说,如果我们忘记了显示的调用Dispose,那么垃圾回收也会调用Finalize,从而保证非托管资源的回收。MSDN上给我们提供了一种很好的模式来实现IDisposable接口来结合Dispose和Finalize,看下面的代码:class MyResourceWrapper:IDisposable { private bool... 阅读全文