接口VS 委托
    
            
摘要:背景对于指定的任务有不同的方案可供选择,通常是很好的。因为可能某一种方案会更加适合该任务,但是有时候做决定会很难。因为这些不同的方案有其各自的优缺点。我经常会停下来好好想想,是不是接口比委托更适合或者是更不适合某个任务。有时候我甚至会回去看我写的代码,这些代码刚开始使用委托来实现,我后来用接口替换掉。因此,是时候写篇文章来阐述一下这两种技术的优缺点了。性能我经常看到有人问接口是不是比委托更快啊。或者是不是相反。通常。别人给的答案会是: 接口更快。委托相当慢 委托更快,因为他们是指向方法的指针,接口则需要一个v-table(虚函数解析表),然后找到委托他们一样快,但委托更容易使用好吧。那些都是错
        
阅读全文
摘要:List<T>列表通用过滤模块设计需求描述数据列表如List<Customer> 加载到DataGridView后,如果记录比较多可能需要对其进行二次过滤,即客户端过滤过滤条件做成可由用户设置的,如下图:在数据源是DataTable时,使用DataView的RowFilter可以轻松按用户的配置拼接出过滤表达式字符串来,设置RowFilter就可以实现过滤效果,但是当数据源是List<T>这样由EF,Linq to sql 等框架返回的集合时要实现上面的功能就需要费点力气了。问题分析:首先参考上面的截图,用户设置好过滤条件后会形成:" (工号 = 
        
阅读全文
摘要:你必须知道的.NET——内存分配在分析内存分配时,应该先了解关于堆栈的区别堆的分配向高地址扩展,而栈的分配向低地址扩展。二。内存分配关于内存的分配,首先应该了解分配在哪里的问题。CLR管理内存的区域,主要有三块,分别为:· 线程的堆栈,用于分配值类型实例。堆栈主要由操作系统管理,而不受垃圾收集器的控制,当值类型实例所在方法结束时,其存储单位自动释放。栈的执行效率高,但存储容量有限。· GC堆,用于分配小对象实例。如果引用类型对象的实例大小小于85000字节,实例将被分配在GC堆上,当有内存分配或者回收时,垃圾收集器可能会对GC堆进行压缩,详情见后文讲述。 1 public 
        
阅读全文
摘要:前段时间有个项目,因为其中需要使用脚本做模板数据的计算,因此让我对脚本引擎产生了兴趣,于是上网到处寻找资料,于是找到了《龙书》、CodeDom。于是又找了半天,找不到开源的脚本引擎源码,脑袋一热,干脆自己写一个,于是就有了这个用纯c#(非CodeDom)编写的脚本引擎。编写过程中收获良多,目前还不是很完善,效率也不高,仅供学习用,后面会上传源代码。 下面说明一下:语法参考Javascript,基本的javascript语法都已实现,但是有些内建对象没实现,例如 Date,数据类型支持 数值,字符串(考虑到在代码中执行代码,所以字符串的定义用 '字符串' 而非 "字符串
        
阅读全文
摘要:1.引言Scheduled Timer将定时器Timer进行封装成ScheduledTimer,很多Timer暴露的成员,都以私有化,并将上一节中的定时器作业(TimerJob)进行了集成。2.ScheduledTimer代码很简单,直接上代码 public class ScheduleTimer { public IEventStorage EventStorage = new LocalEventStorage(); public event ExceptionEventHandler Error; private static Tim...
        
阅读全文
摘要:简介本文介绍net处理html页面元素的工具类(HtmlAgilityPack.dll)的使用,用途比较多的应该是例如采集类的功能,采集到的html字符串要怎样处理是一个头痛的问题,如果是截取就太麻烦了而且容易出错。所有就用到本文的第三方dll来处理了。下载下载地址:http://htmlagilitypack.codeplex.com/点击“download”按钮直接下载。使用1.添加HtmlAgilityPack.dll引用(引用类using HtmlAgilityPack;)。2.简单根据html中input的id获取value代码如下:// 模拟用户请求WebClient webCli
        
阅读全文
摘要:前言:日常开发中如果一开始没有对系统进行比较好的规划那么容易出现两类问题且在版本发布中屡见不鲜,这两类问题是配置文件和数据连接,这里为大家分享一个监视数据库连接的组件,文末有代码示例下载。 一,解决方案图 DBConnectionManage.config: 配置文件,配置两个节点,一个是组件监视连接的最大数量一个是系统控制连接的有效时间 MConnectionWrap:这个是被监视对象的封装类,包括连接、过期时间、开启连接的业务类的监视器(GCHandle) DBConnectionMonitor:连接监视主类,提供添加监视对象到一个字典里,后台线程循环遍历字典去处理被监视的对象...
        
阅读全文
摘要:题目:下列数据放在一个List中,当ID和Name都相同时,去掉重复数据IDName1张三1李三1小伟1李三2李四2李武------------------------------------------------------------------------------------------------------------解决这个问题,方法很多,最开始想到的就Enumerable.Distinct方法我们可能经常用的是Distinct<TSource>(IEnumerable<TSource>)用它对数组这一类去重复这里要用Distinct<TSour
        
阅读全文
摘要:1.引言上节介绍了事件持久化,就是事件恢复执行,有时候Timer启动时,时间已经过了很久了,这样的话,事件恢复执行,可能会出现很多,但并不希望它们都出执行,而是有选择性的执行,这就是这节介绍的过滤器EventFilter。2.EventFilterScheduled Timer提供了一个过滤器接口,先来看看接口声明 public interface IResultFilter { void FilterResultsInInterval(DateTime start, DateTime end, List<DateTime> list); }很简单,一个方法,提...
        
阅读全文
摘要:关键字:C#WebBrowser作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/09/24/CSharp-WebBrowser.html0、常用方法Navigate(string urlString):浏览urlString表示的网址Navigate(System.Uri url):浏览url表示的网址Navigate(string urlString, string targetFrameName, byte[] postData, string additionalHeaders): 浏览urlString表示的网址,并发送
        
阅读全文
摘要:Trie树用来给字符串排序的时候有一个好处:边读边排序,但是读完之后要输出的时候麻烦来了。经过测试,用26W个word建立的Trie中,空白位是使用位的20倍左右,那么在Trie比较大的时候当然也就比较慢了。这篇文章讨论的优化主要是去避免访问这些空白位,实现方式无关(数组或指针?)。 首先想到的一个方法是:在insert的时候顺便标记这个节点有哪些子节点。因为总共只有26种可能性,那么自然也就想到了用一个int作为flag,如果0位置1则表示有‘a’这个子节点。 第一步(记录)完成了,下面我们来看如何来使用该记录?熟悉位移的同学可能已经想到:可以使用x&-x来计算出最低位为1的数。但是
        
阅读全文
摘要:最近在研究Asp.net MVC, 打算在云平台上部署一个MVC的开源CMS Orchard学习一下,奈何Azure现在在国内不能注册,只能转到AppHarbor云平台上。以下是我尝试的如何使用AppHarbor部署Orchard CMS.一, 注册AppHarbor云平台, 创建一个Appliation和数据库环境1. 注册一个AppHarbor账号, 网址是https://appharbor.com/2. 创建一个新的Application, 这里我取的名字是orchard3. 在Add-ons中,为这个新的Application创建一个新的Sql Server数据库,使用免费的,10M空
        
阅读全文
摘要:在分布式系统的数据一致性问题(一)里面,简单的介绍了分布式数据的同步问题,上面的问题比较抽象,在目前的互联网应用中还很少见,这次在通过一个比较常见的例子,让大家更深入的了解一下分布式系统设计中关于数据一致性的问题这次我们拿我们经常使用的功能来考虑吧,最近网购比较热门,就以京东为例的,我们来看看京东的一个简单的购物流程用户在京东上下了一个订单,发现自己在京东的账户里面有余额,然后使用余额支付,支付成功之后,订单状态修改为支付成功,然后通知仓库发货。假设订单系统,支付系统,仓库系统是三个独立的应用,是独立部署的,系统之间通过远程服务调用。订单的有三个状态:I:初始 P:已支付 W:已出库,订单金额
        
阅读全文
摘要:Windows开发的内功和招式最近一个月笔者休了大约两周的假期,期间没有学习新的开发技术,也没有去游山玩水,而是对自己的知识结构和Windows开发本身进行了一个深入的思考,收获颇多,在这里希望和大家共同分享一下。如果把Windows开发比作练武,那么就一定有内功和招式,二者相依相存,没有内功的招式只能算是花架子,中看不中用。那么,什么算是内功呢?首先,我想说的是系统模型和知识,整天在windows上做开发,对windows的了解够么?可能很多人说,我是做.net开发的,了解那么多没用,.net都做好了。我同意,人各有志嘛,但是我想问个问题,.net写的大型客户端有时候会突然卡一下,你能告诉我
        
阅读全文
摘要:编程不能死记硬背,要靠多实践操作 如今的网络越来越发达,分享一个文件是如此的简单。特别是有了电驴、迅雷这样的下载软件就更加如虎添翼了,想从网上下载一个几个G大小的文件,真是不费吹灰之力。好,废话太多了,直接进入咱们今天的主题吧。 要实现像迅雷一样的多线程下载,核心问题是要将多线程的概念以及怎么实现的问题弄清。 当然,本文技术含量很低,大牛请直接绕道。 多线程是相对单线程来说的,具体可以参考百度百科里的解释:http://baike.baidu.com/view/65706.htm 每个程序运行都有一个最基本的主线程,用于处理界面绘画,人机交互,后台处理等过程,因此如果是在单线程程序里操作打量耗
        
阅读全文
摘要:.NET(C#): Task.Unwrap扩展方法和async Lambda目录Task.Unwrap基本使用Task.Factory.StartNew和Task.Run的Unwrap操作使用案例:LINQ中的async Lambda返回目录Task.Unwrap基本使用这个扩展方法定义在TaskExtensions类型中,命名空间在System.Threading.Tasks。Unwrap会把嵌套的Task<Task>或者Task<Task<T>>的结果提取出来。就像这样,不用Unwrap的话:staticvoidMain(string[] args){ 
        
阅读全文
摘要:实现托盘图标可以使用NotifyIcon控件。要求:当窗体最小化时,隐藏窗体并显示托盘图标。当双击托盘图标时,隐藏托盘图标并显示窗体。操作步骤:使用Visual Studio新建一个WinForm项目。拖进一个NotifyIcon控件,命名为TheNotifyIcon。在窗体的构造函数里加入以下代码:TheNotifyIcon.Text = "双击这里显示窗体";TheNotifyIcon.Icon = new Icon(@"D:\favicon.ico");这里D:\favicon.ico是D盘下放着的图标文件。也可以把图标加到资源里。然后添加TheN
        
阅读全文
摘要:我觉的MS的.net方案其实很不错。C#呢,用现在流行的话来说“很给力”!但是.net版本众多。而且.NET Framework框架很大。拖着一个大大的.netFramework总是让人很郁闷。我也碰到了这个让人郁闷的问题。在网上找呀找呀。找到另一个.NET Framework 替代方案。Mono。下载地址为:http://www.go-mono.com/mono-downloads/download.htmlMono2.10.2版本支持.net 2.0至4.0版本。下载回来后安装一下,我傻了居然有336M。而且Mono的居然方式是命令行的。仍然让人很郁闷。算了,既然安装了。找找资料吧。终于看
        
阅读全文
摘要:内容摘要:这是之前有一个朋友项目中实际遇到的问题:在一个窗口中,希望点击某个按钮后(或者同类操作),播放一个警告的声音,很显然,这个音频播放是用异步来实现。但又希望播放一段时间后,自动地停止播放。这个问题要说难也不是很难,我们无非是要想办法做一个计时,到达规定时候(例如5秒)后,强制地将线程结束掉。问题出在如何写较为理想些。问题分析:播放音频本身不难,而且在WPF中,音频播放默认就是异步的,根本不需要我们单独去启动线程。代码大致如下 var player = new SoundPlayer(); player.SoundLocatio...
        
阅读全文
摘要:类型构造器可以用于接口(C#不允许这样做),引用类型,值类型。实例构造器用来设置一个类型某个实例的初始化状态,类型构造器用来设置一个类型的初始化状态。默认情况下,类型没有定义类型构造器。下面展示如何定义值类型和引用类型的构造器:internal sealed class SomeRefType { static SomeRefType() { } } internal struct SomeValType { static SomeValType() { } }可以发现一个特点是:无参,static标记,...
        
阅读全文