摘要:需要明确一下C#程序(或者说.NET)中的资源。简单的说来,C#中的每一个类型都代表一种资源,而资源又分为两类: 托管资源:由CLR管理分配和释放的资源,即由CLR里new出来的对象; 非托管资源:不受CLR管理的对象,windows内核对象,如文件、数据库连接、套接字、COM对象等; 毫无例外地,如果我们的类型使用到了非托管资源,或者需要显式释放的托管资源,那么,就需要让类型继承接口IDisposable。这相当于是告诉调用者,该类型是需要显式释放资源的,你需要调用我的Dispose方法。 不过,这一切并不这么简单,一个标准的继承了IDisposable接口的类型应该像下... 阅读全文
一起谈.NET技术,引用类型赋值为null与加速垃圾回收
2011-09-01 23:58 by 狼人:-), 182 阅读, 0 推荐, 收藏,
摘要:在标准的Dispose模式中,提到了需要及时释放资源,却并没有进一步细说让引用等于null是否有必要。 有一些人认为等于null可以帮助垃圾回收机制早点发现并标识对象是垃圾。其他人则认为这没有任何帮助。是否赋值为null的问题首先在方法的内部被人提起。现在,为了更好的阐述提出的问题,我们来撰写一个Winform窗体应用程序。如下: private void button1_Click(object sender, EventArgs e) { Method1(); Method2(); } ... 阅读全文
一起谈.NET技术,在C#中选择正确的集合进行编码
2011-09-01 23:58 by 狼人:-), 180 阅读, 0 推荐, 收藏,
摘要:要选择正确的集合,我们首先要了解一些数据结构的知识。所谓数据结构,就是相互之间存在一种或多种特定关系的数据元素的集合。结合下图,我们看一下对集合的分类。 集合分类 在上图中,可以看到,集合总体上分为线性集合和非线性集合。线性集合指元素具有唯一的前驱和后驱的数据结构类型。非线性集合是指具有多个前驱或后驱的数据结构类型,如:树、图。在FCL中,非线性集合实现的比较少,所以我们将会更多的讨论线性集合。 注意:由于类型安全、转型效率等方面的原因,本建议将只讨论泛型集合。 线性集合按存储方式,又分为直接存储和顺序存储。所谓直接存储是指:该类型的集合数据元素可以直接通过下标... 阅读全文
一起谈.NET技术,一句代码实现批量数据绑定[上篇]
2011-09-01 23:58 by 狼人:-), 157 阅读, 0 推荐, 收藏,
摘要:对于一个以数据处理为主的应用中的UI层,我们往往需要编写相当多的代码去实现数据绑定。如果界面上的控件和作为数据源的实体类型之间存储某种约定的映射关系,我们就可以实现批量的数据绑定。为了验证这种想法,我写了一个小小的组件。这个小玩意仅仅是我花了两个小时写的,其中还有很多问题没有解决,比如对于空值的处理,特殊控件属性值的HTML编码问题,以及频繁反射的性能问题,仅仅演示一种解决思路而已。本篇着重介绍如何通过这个组件来解决我们在进行数据绑定过程中的常见问题,下篇会介绍它的设计。[源代码从这里下载] 目录: 一、基于控件ID/实体属性名映射的数据绑定 二、一句代码实现批量数据绑定 三、修正绑定... 阅读全文
一起谈.NET技术,一句代码实现批量数据绑定[下篇]
2011-09-01 23:58 by 狼人:-), 193 阅读, 0 推荐, 收藏,
摘要:《上篇》主要介绍如何通过DataBinder实现批量的数据绑定,以及如何解决常见的数据绑定问题,比如数据的格式化。接下来,我们主要来谈谈DataBinder的设计,看看它是如何做到将作为数据源实体的属性值绑定到界面对应的控件上的。此外,需要特别说明一点:《上篇》中提供了DataBinder最初版本的下载,但已经和本篇文章介绍的已经大不一样了。 最新版本的主要解决两个主要问题:通过Expression Tree的方式进行属性操作(属性赋值和取值),添加了“数据捕捉”(Data Capture)的功能,以实现将控件中的值赋给指定的实体。但是,这并不意味着这就是一个最终版本,这里面依然有一些... 阅读全文
一起谈.NET技术,使用WCF实现SOA面向服务编程——使用AJAX+WCF服务页面开发
2011-09-01 23:58 by 狼人:-), 186 阅读, 0 推荐, 收藏,
摘要:在上一篇讲到,如果将BLL层的每一个类都转化为*.svc,这是一个不实在的想法。它会使服务变化复杂,难于管理。 这时候,我们第一时间想到的是23个简单开发模式中的Factory,在这里,Factory正好派上用场。我们把这个Factory称之为管道(pipeline) ,通过这个管道客户端可以随意调用服务器BLL层里面的类。 (关于管道的概念,建议参考Cory Isaacson的杰作《多核应用架构关键技术—软件管道与soa》) 当你使用B/S方式开发UI层时,只要了解此开发模式,使用Ajax加上WCF里面的WebHttpBinding绑定和WebHttpBehavior行为,... 阅读全文
一起谈.NET技术,使用WCF实现SOA面向服务编程——简单的WCF开发实例
2011-09-01 23:58 by 狼人:-), 212 阅读, 0 推荐, 收藏,
摘要:前面为大家介绍过WCF的特点,现在再讲解一下WCF基础概念。 在WCF里,各个Application之间的通信是由EndPoint来实现的,EndPoint是WCF实现通信的核心要素。一个WCF Service可由多个EndPoint集合组成,每个EndPoint只能有一种绑定,就是说EndPoint就是通信的入口,客户端和服务端通过
EndPoint交换信息。 <service name = " " > < endpoint address = "" binding = " wsHttpBinding " cont 阅读全文
一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(九)粒子系统
2011-09-01 23:58 by 狼人:-), 198 阅读, 0 推荐, 收藏,
摘要:粒子系统通常用于三维场景中进行真实环境模拟,比如第四节的天气系统。天气的实现是粒子系统最重要的应用领域之一,所有的一切无论是云、雨、雾,还是落叶、陨石及闪电,都可视作基础粒子;除此之外,游戏中常常还会用到粒子系统来渲染像发光、轨迹等抽象效果。当然,有时简单并不意味着就不能缔造奇迹,比如本节大家将要看到的就是基于简单粒子系统所创建的当下主流2.5D RPG中极其拉风之装备粒子发散动画特效。 一提到Silverlight中的粒子,首先想到的肯定是WriteableBitmap。没错,今天的主角就是它,让人又爱又恨的WriteableBitmap。爱,因为它可以对Silverlight中任... 阅读全文
一起谈.NET技术,C# 中奇妙的函数之ToLookup
2011-09-01 23:58 by 狼人:-), 411 阅读, 0 推荐, 收藏,
摘要:我将和大家一起来学学C#中一些非常有用函数,对于有些人来说可能它们不起眼,因此常常忽略它们。它们不会嚷嚷到:使用我吧!我会让你节省很多的时间,而且让你的代码变得更加的简洁! -- 但是,这些话会从对它们熟悉的程序员的脑海中涌现出来。 好的!先来看看ToLookup: 故事的背景 让我们先来创建一个简单的类来表示产品,产品有ID,类别,和价格,这个类没有什么特别: public sealed class Product { public int Id { get; set; } public string Category { ... 阅读全文
一起谈.NET技术,晚绑定场景下对象属性赋值和取值可以不需要PropertyInfo
2011-09-01 23:58 by 狼人:-), 300 阅读, 0 推荐, 收藏,
摘要:在《一句代码实现批量数据绑定》中,我通过界面控件ID与作为数据源的实体属性名之间的映射实现了批量数据绑定。由于里面频繁涉及对属性的反射——通过反射从实体对象中获取某个属性值;通过反射为控件的某个属性赋值,所以这不是一种高效的操作方式。为了提升性能,我通过IL Emit的方式创建了一个PropertyAccessor组件,以实现高效的属性操作。如果你看了我在文中给出的三种属性操作性能的测试结果,相信会对PropertyAccessor的作用有深刻的印象。[源代码从这里下载] 目录: 一、PropertyAccessor与PropertyAccessor<T>的API定义 ... 阅读全文
一起谈.NET技术,三种属性操作性能比较:PropertyInfo + Expression Tree + Delegate.CreateDelegate
2011-09-01 23:58 by 狼人:-), 265 阅读, 0 推荐, 收藏,
摘要:在《上篇》中,我比较了三种属性操作的性能:直接操作,单纯通过PropertyInfo反射和IL Emit。本篇继续讨论这个话题,我们再引入另外两种额外的属性操作方式:Expression Tree(这和IL Emit基本一致)和通过Delegate的静态方法CreateDelegate创建相应的委托进行属性的赋值和取值。[源代码从这里下载] 目录 一、定义测试相关的接口、类型和委托 二、通过Expression Tree的方式创建用于属性操作的委托 三、编写属性赋值操作测试方法 四、编写属性取值操作测试方法 五、执行测试程序,查看... 阅读全文
一起谈.NET技术,MEF——.NET中值得体验的精妙设计
2011-09-01 23:58 by 狼人:-), 288 阅读, 0 推荐, 收藏,
摘要:MEF(Managed Extensibility Framework)是.NET Framework 4.0一个重要的库,Visual Studio 2010 Code Editor的扩展支持也是基于MEF构建的。MEF的目标是简化创建可扩展的应用程序,其核心类是ComposablePart,即具有组合能力的组件,每一个称为ComposablePart(中文可为可组合构件,不过下文一直采用英文来表示,这样比较贴切)的组件可以组合(称为Import)其它组件的功能(其它组件通过声明Export提供功能)并且它也可以通过定义Export将其功能暴露给其它组件。 ComposablePar... 阅读全文
一起谈.NET技术,使用WCF实现SOA面向服务编程—— 架构设计
2011-09-01 23:58 by 狼人:-), 329 阅读, 0 推荐, 收藏,
摘要:SOA本身就是一种面向企业级服务的系统架构,简单来说,SOA就是一种进行系统开发的新的体系架构,在基于SOA架构的系统中,具体应用程序的功能是由
一些松耦合并且具有统一接口定义方式的组件(也就是service)组合构建起来的。因此,基于SOA的架构也一定是从企业的具体需求开始构建的。但是,SOA和其它企业架构的不同之处就在于SOA提供的业务灵活性。业务灵活性是指企业能对业务变更快速和有效地进行响应、并且利用业务变更来得到竞争优势的能力。对企业级架构设计师来说,创建一个业务灵活的架构意味着创建一个可以满足当前还未知的业务需求的IT架构。使用WCF实现SOA,正好可以利用WCF的灵活性,把业务.. 阅读全文
一起谈.NET技术,Silverlight 2.5D RPG游戏技巧与特效处理:(十)空间分层战斗系统
2011-09-01 23:58 by 狼人:-), 171 阅读, 0 推荐, 收藏,
摘要:提到RPG中的空战系统,首先想到的当然是3D,这方面可是它的绝活。比如以之为核心噱头的《永恒之塔》;当然,在2.5D网游中也有着类似的实现,像《西游记Online》,不过该游戏的空战仅仅是将战场(场景)变换到了空中而已,地面呈现的仅是会动的背景,类似的功能其实早就已出现在《大话西游》系列等著名的2D游戏中。 本节我将引领大家在教程Demo的基础上通过简单的修改轻松实现完美的天空、大地之空间分层战斗系统:当主角飞入天空时,隔着云雾我们能依稀鸟瞰地面上的一切角色、动画等的一切真实活动;而当主角降落大地时,天空中的一切都将被隐藏,一切都将显得自然而贴近现实。 有了第八节空间缩放系统与角色... 阅读全文
一起谈.NET技术,带你走进缓存世界
2011-09-01 23:58 by 狼人:-), 168 阅读, 0 推荐, 收藏,
摘要:我们搞程序的多多少少都了解点算法。总体来讲,算法是什么?算法就是“时间”和“空间”的互换策略。我们常常考究一个算法的时间复杂度或空间复杂度,如果我们有绝对足够的时间或空间,那么算法就不需要了,可惜这种条件是不存在的,只是在某些情况下相对来说我们不用去考虑其中一个。今天我们讨论的“缓存”,自然就是“用空间换时间”的算法。 缓存就是把一些数据暂时存放于某些地方,可能是内存,也有可能硬盘。总之,目的就是为了避免某些耗时的操作。我们常见的耗时的操作,比如数据库的查询、一些数据的计算结果,或者是为了减轻服务器的压力。其实减轻压力也是因查询或计算,虽然短耗时,但操作很频繁,累加起来也很长,造成严重... 阅读全文
浙公网安备 33010602011771号