摘要:在动态编程时,我们常常需要运行时确定调用对象的哪个属性或哪个方法。这个任务通常可以用反射来解决。但众所周知,反射的性能要比静态指定的方式低很多,因为反射要通过运行时复杂的机制完成。能否获得性能和灵活性兼备的动态调用?我在开发VBF的最新功能时反复考虑了这个问题。我们通常动态调用一个对象的属性是采用这样的手法,假设对象a有一个属性叫做MyProp: Type t = a.GetType();Pro...
阅读全文
摘要:从今天起,我将分享一些我在.NET泛型方面的研究心得。这些心得大都是我在设计VBF中思考发现的,还受了很多C++模板与JAVA泛型的启发。其中相当多的技巧和概念都是大部分“深入C# 2.0”类文章也见不到的。我考虑把其中概念性的部分系统地整理成书,而技巧性的东西则通过我这个系列不定期地分享到Blog上。希望用到.NET泛型的人能从我这些技巧中受益。 首先我要介绍的技巧是如何提供类型参数之间的转换...
阅读全文
摘要:在上一篇《来一点反射,再来一点Emit —— 极度简化Entity!》中,Teddy运用反射和Emit极度简化了Entity的定义方式。本文将在上文的基础上,用自定义KeyValueCollection类代替原来的Dictionary类承载Entity的数据,从而改善Entity的读写性能,并保持Dictionary的方便的使用接口。为什么Dictionary的性能不好?当然,这里说的性能不好主要...
阅读全文
摘要:泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(type parameters)的概念。类型参数使得设计类和方法时,不必确定一个或多个具体参数,其的具体参数可延迟到客户代码中声明、实现。这意味着使用泛型的类型参数T,写一个类MyList,客户代码可以这样调用:MyList, MyList或 MyList。这避免了运行时类型转换或装箱操...
阅读全文
摘要:在前一篇文章《没有ORM或代码生成数据就不能持久化了? - 用范型技术代替代码生成!》中,Teddy尝试运用泛型极大简化了一个轻量级持久化框架对代码生成的依赖,并且为了保证性能,整个持久化组件没有使用反射。在本文中,Teddy将在保证性能的基础上,加一点反射和加一点Emit,从而进一步简化Entity的定义和使用,当然也就进一步降低了组件对传统代码生成的依赖。读者可以对比前文阅读本文,看看改进的效...
阅读全文
摘要:.NET 提供的反射(Reflection)机制可以很方便的加载插件。本文提供一种方法,可以灵活的正确的载入所需的插件。 .NET的插件机制的简单实现 沐枫网志在.NET中,一个完整的类型名称的格式如 "类型名, 程序集名"。 例如:"System.Configuration.NameValueSectionHandler, System, Version=1.0.3300.0, Cult...
阅读全文
摘要:今早起床北京天灰蒙蒙的一片,在来实验室的路上有不易察觉到的雪花从眼前飘过。深呼吸一口,能嗅到年的味道,让人想到家乡。这种感觉很好。 (一)垃圾回收器的基本假定 (1)最近被分配内存空间的对象最有可能需要被释放。在方法被执行前,通常需要为该方法所使用到的对象分配内存空间,搜索最近被分配的对象集合有助于花费最少的工作来释放进可能多的空闲内存空间。 (2)生命期最长的对象需要释放的可能性...
阅读全文
摘要:一、预备知识—程序的内存分配一个由c/C++编译的程序占用的内存分为以下几个部分1、栈区(stack)—由编译器自动分配释放,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。2、堆区(heap)—一般由程序员分配释放,若程序员不释放,程序结束时可能由OS回收。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。3、全局区(静态区)(static)—全局变量和静态变量的存...
阅读全文
摘要:【文章目的】 在.net程序中嵌入flash文件,为了防止有人通过flash右键菜单中的“关于Macromedia”打开ie访问internet,或者flash中通过GetURL()方法打开浏览器直接访问internet 【解决方案】 使用Hook技术,截获flash在启动外部浏览器访问internet时向系统发送的消息,然后用线程将外部浏览器Kill掉 【编程手记】...
阅读全文
摘要:GUID(Global unique identifier)全局唯一标识符,它是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节的二进制值。 GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:6F9619FF-8B86-D011-B...
阅读全文
摘要:1。问题 在设计实体类的时候,通常我们会把某些字段设置为枚举值,例如性别: public enum Sex:int{ Male = 'M',Female = 'W',NotRestrict = 'A'} 这样好处不用说,通常是为了直观的考虑,还有限制输入的好处;如果强制用int转换,还以用System.Enum.IsDefined() 来判断枚举是否被定义,但是麻烦的是在...
阅读全文
摘要:在组件编程中对事件的理解是十分重要的,C# 中的“事件”是当对象发生某些有趣的事情时,类向该类的客户提供通知的一种方法。与事件联系最为紧密的,个人认为是委托.委托可以将方法引用封装在委托对象内。为了弄清组件-事件-委托三者的关系,本人用实际的例子来谈 谈小弟的理解。 首先创建一个Windows控件项目,添加如下控件样板。 当事件触发时,会传递一个EventArgs类型的参数给事件处理方法,...
阅读全文
摘要:在C#中使用一个类时,分两个阶段。首先需要定义这个类,即告诉编译器这个类由什么字段和方法组成。然后(除非只使用静态方法)实例化类的一个对象。使用委托时,也需要经过这两个步骤。首先定义要使用的委托,对于委托,定义它就是告诉编译器这种类型代表了那种类型的方法,然后创建该委托的一个或多个实例。 定义委托是从delegate开始的然而它是如何运作的呢。也许弄个鼠标事件会容易理解一些,这里还是拿出书中的例子...
阅读全文
摘要:在我们的系统的编写过程中,应该有很多的时候需要客户下载文件.我第一次的做法(应该也是大部分人的做法吧?)是: 1 HttpResponse response = HttpContext.Current.Response;2 string js = "";3 js = string.Format(js, url);4 ...
阅读全文
摘要:一、AOP实现初步 AOP将软件系统分为两个部分:核心关注点和横切关注点。核心关注点更多的是Domain Logic,关注的是系统核心的业务;而横切关注点虽与核心的业务实现无关,但它却是一种更Common的业务,各个关注点离散地分布于核心业务的多处。这意味着,如果不应用AOP,那么这些横切关注点所代表的业务代码,就会分散在系统各处,导致系统中的每个模块都与这些业务具有很强的依赖性。在这里,所谓横切...
阅读全文
摘要:(4)继续优化――用空间换取时间 现在对每一个字符,都要用get_Item(object key)方法过一遍,可这个乖乖方法那么长,肯定太耗时间了,能不能用更简单的手段呢?改Hashtable?哇,那代码,叫一个看不懂。仔细琢磨琢磨,有了,直接用数组!每一个汉字对应一个Int16,以该值为索引,数组中在那个位置的值为值,这样最快速了。就是占点空间,内存便宜嘛。反正这东西只初始化一次,占不了多少k。...
阅读全文
摘要:下面以实际例子具体解释相关技巧。 (1)缘起 bfax@smth.org发了一个字符串转换程序,引起了热烈讨论。原程序如下: 1 2Function B2G()Function B2G(prestr As String) As String 3 Dim i, j As Integer 4 Const GB_Lib = "" //几千个字符吧,因为字符串长度限制,原程序是由...
阅读全文
摘要:近一段时间测试过几个程序,有一些心得。具体步骤如下: (1)写出测试程序(2)测试原程序,记录运行时间,作为优化的基础。要在Release下测试。(3)检查算法,是不是最有效的算法。尤其是现在内存便宜,看有没有能够用空间换取时间的方法(4)用Reflector查看类库,看你使用的方法是不是最有效率的方法(5)对于运行次数多,性能关键的地方,不要直接调用类库。类库是为通用目的设计的,用Reflec...
阅读全文
摘要:SQL数据分页的存储过程: ALTER PROCEDURE p_qb_GetMessageRecordToDataGrid @TotalRecs int output,@pagesize int,'页大小@pagenum int,'当前页@typeid int'where子句的条件变量ASDECLARE @sqlTable AS nvarchar(400)select @TotalRecs = ...
阅读全文
摘要:在做系统开发的过程中,我们经常会遇到用asp.net来操作IIS,如新建虚拟目录、更改虚拟目录的属性、删除虚拟目录等操作,现在分析如下://假如虚拟目录名为"Webtest",先在项目中引用 //System.DirectoryServices.dll,再 using System.DirectoryServices; protected System.DirectoryServic...
阅读全文