Effective C# 原则49:为C#2.0做好准备

JerryXia 发表于 , 阅读 (1,953)
C#2.0,在2005年已经可以使用了,它有一些主要的新功能。这样使得目前使用的一些最好的实际经验可能会有所改变,这也会随着下一代工具的发布而修改。尽管目前你还可以不使用这些功能,但你应该这些做些准备。当Visual Studio .net2005发布后,会得到一个新的开发环境,升级的C#语言。附加到这门语言上的内容确实让你成为更有工作效率的开发者:你将可以写更好重用的代码,以及用几行就可以写出更高级的结构。总而言之,你可以更快的完成你的工作。C#2.0有四个大的新功能:范型,迭代,匿名方... 阅读全文

缓存穿透

JerryXia 发表于 , 阅读 (2,809)
缓存系统不得不考虑的另一个问题是缓存穿透与失效时的雪崩效应。缓存穿透是指查询一个一定不存在的数据,由于缓存是不命中时被动写的,并且出于容错考虑,如果从存储层查不到数据则不写入缓存,这将导致这个不存在的数据每次请求都要到存储层去查询,失去了缓存的意义。解决办法:对所有可能查询的参数以hash形式存储,在控制层先进行校验,不符合则丢弃。还有最常见的则是采用布隆过滤器,将所有可能存在的数据哈希到一个足够大的bitmap中,一个一定不存在的数据会被这个bitmap拦截掉,从而避免了对底层存储系统的... 阅读全文

在.NET中使用WIN32 API

JerryXia 发表于 , 阅读 (1,277)
目前最全的PInvoke资源网站:www.pinvoke.net,里面包含了绝大部分已知Win32 API的 .NET封装。值得庆贺的是:里面一般都包含每个API的C#/VB.NET版本,还包含MSDN的引用连接。 阅读全文

MicroSoft C#代码规范(Record)

JerryXia 发表于 , 阅读 (3,305)
一定请 将代表了读/写集合的属性或返回值声明为Collection或其子类,将代表了只读集合的属性或返回值声明为ReadOnlyCollection或其子类。您应该重新考虑对于 ArrayList 的使用,因为所有添加至其中的对象都被当做System.Object ,当从ArrayList取回值时,这些对象都会拆箱,并返回其真实的值类型。所以我们推荐您使用定制类型的集合,而不是ArrayList。比如,.NET在System.Collection.Specialized命名空间内为Stri... 阅读全文

.net 程序集自动生成版本号

JerryXia 发表于 , 阅读 (2,241)
一、 版本号自动生成方法只需把 AssemblyInfo.cs文件中的[assembly:AssemblyVersion("1.0.0.0")]改成[assembly:AssemblyVersion("1.0.*")],另外还需要把[assembly:AssemblyFileVersion("1.0.0.0")]注释屏蔽掉。这样再生成的程序集就是自动版本号了。按照这个格式出来的版本号,内部修订版本号(第三个字段)的位置出现的是2000年1月1日到编译日期的天数,内部修订号(第四个字段)是当... 阅读全文

创建基于二进制的组件

JerryXia 发表于 , 阅读 (1,931)
随着类的数量增加,创建二进制的组件就变得很平常了:你想分离部分功能。所有不同的是,二进制组件可以让你独立的保存这些离散的功能。创建的组件程序集可以方便的共享逻辑,方便交叉语言编程,以及方便布置。在.Net程序就是组件包,每一个程序什么样可以随时更新和发布。你应该已经知道,基于程序集之间的应用程序是多么容易更新呀,程序集之间的偶合是多么好呀!最小偶合就是说更多的是减少了程序集之间复杂的依懒关系。同时也意味着你可以简单的更新小块新的程序集。这一章就是关于创建简单易用,容易布置,以及容易更新的程... 阅读全文

.Net资源管理

JerryXia 发表于 , 阅读 (1,826)
一个简单的事实:.Net应用程序是在一个托管的环境里运行的,这个环境和不同的设计器有很大的冲突,这就才有了EffectiveC#。极大限度上的讨论这个环境的好处,须要把你对本地化环境的想法改变为.NetCLR。也就意味着要明白.Net的垃圾回收器。在你明白这一章里所推荐的内容时,有必要对.Net的内存管理环境有个大概的了解。那我们就开始大概的了解一下吧。垃圾回收器(GC)为你控制托管内存。不像本地运行环境,你不用负责对内存泄漏,不定指针,未初始化指针,或者一个其它内存管理的服务问题。但垃圾... 阅读全文