Hello World
Spiga

分类:实践优化

再谈抽象类和接口

2009-08-19 12:15 by 老赵, 8736 visits
摘要:昨天我质疑了为什么定义RouteBase抽象类,而不是IRoute接口,我谈到对于一个“没有任何实现”的抽象类来说,开发人员应该使用接口。不过在后面的评论中,有朋友给了我启发,让我忽然想到更多的事情。晚上又再次翻了翻《Framework Design Guidelines》之后,打算再谈一些东西,把这个问题讨论地更加清楚一些。 阅读全文

ASP.NET Routing中最令人摸不着头脑的设计

2009-08-18 19:47 by 老赵, 7160 visits
摘要:您觉得ASP.NET Routing中最令人摸不着头脑的设计是什么? 阅读全文

NHibernate中一对一关联的延迟加载

2009-08-17 09:08 by 老赵, 8198 visits
摘要:这篇文章谈论的其实只是一个小技巧,而且甚至于这个是由于我对NHibernate不够了解而造成的。因此,如果您有更好的做法也请不吝指出。这个问题也就是“如何实现NHibernate中一对一映射的延迟加载”。 阅读全文

从.NET中委托写法的演变谈开去(下):性能相关

2009-08-10 00:44 by 老赵, 12130 visits
摘要:在上一篇文章中,我们详细讲述了C# 3.0中Lambda表达式(构造委托)的使用方式,它在语义上的优势及对编程的简化——这些内容已经属于委托的“扩展内容”。不如这次谈得更远一些,就来讨论一下上文中“编程方式”的性能相关话题。 阅读全文

从.NET中委托写法的演变谈开去(中):Lambda表达式及其优势

2009-08-07 08:24 by 老赵, 17878 visits
摘要:在上一篇文章中我们简单探讨了.NET 1.x和.NET 2.0中委托表现形式的变化,以及.NET 2.0中匿名方法的优势、目的及注意事项。那么现在我们来谈一下.NET 3.5(C# 3.0)中,委托的表现形式又演变成了什么样子,还有什么特点和作用。 阅读全文

从.NET中委托写法的演变谈开去(上):委托与匿名方法

2009-08-05 12:50 by 老赵, 18675 visits
摘要:在《关于最近面试的一点感想》一文中,Michael同学谈到他在面试时询问对方“delegate在.net framework1.1,2.0,3.5各可以怎么写”这个问题。我也问过,那么我就先单独针对这个问题进行解释,然后谈谈自己为什么会提出这个问题吧。 阅读全文

快速计算表达式树

2009-07-29 09:25 by 老赵, 9066 visits
摘要:.NET 3.5中新增的表达式树(Expression Tree)特性,第一次在.NET平台中引入了“逻辑即数据”的概念,它是LINQ to Everything在技术实现上的重要基石之一。对表达式树进行计算,是处理表达式树时中最常见的工作了。根据我的本地测试结果,在一台P4 2.0 GHz的服务器上,单线程连续计算一万个简单的四则运算表达式便要花费超过1秒钟时间。这并非是一个可以忽略的性能开销,引入一种性能更好的表达式树计算方法势在必行。 阅读全文

关于网页*静态化*及SEO问题的一些补充

2009-07-06 00:08 by 老赵, 12267 visits
摘要:前一篇讨论“静态页”的文章反响不错,不少朋友发表了自己的看法,也给老赵更多的想法。虽然也在前一篇文章后面回复了不少内容,但是就以往经验来看,总结为一篇新的文章会让我想表达的内容更为明确。对于“静态化”这一原本就非常容易让人混淆的概念来说更是如此。在这篇文章里,老赵也会谈谈自己对于SEO这个工作的看法——以及以前遇到过的一个SEO“专家”。欢迎围观。 阅读全文

谈*静态页*(或网页*静态化*)的时候,请区分一些概念

2009-07-05 01:37 by 老赵, 27936 visits
摘要:“静态页”,在Web应用程序开发中是很常见的概念。只是我发现目前还是有相当部分的朋友,在这方面的存在一定的误区。不久前有朋友写了一篇题为《提供生成静态页核心代码》的文章,介绍了一种“向硬盘写入页面文件”的方式。这篇文章的内容在此并不多作讨论,只是它的摘要存在一个严重的问题,因为它混淆了两个概念。现在独立写一篇文章,也想把一些问题讲讲清楚,以后在讨论的时候也好有个准。 阅读全文

.NET中*延迟*特性的几个陷阱

2009-06-08 13:19 by 老赵, 26009 visits
摘要:.NET发展至今,其实各处都有“延迟(Lazy)”的痕迹,一个小小的“Laziness”给我们带来了不少灵活性。“延迟”的关键就在于“只在需要的时候处理数据”,老赵曾经在多篇文章中提到了类似的概念,如《高阶函数、委托与匿名方法》及《您善于使用匿名函数吗?》。不过“延迟”本身也会给您带来一些陷阱,某些陷阱您很有可能也曾经遇到过。这篇文章便是总结了延迟特性的集中常见陷阱,并给出应对方案。 阅读全文

谈表达式树的缓存(7):五种缓存方式的总体分析及改进方案

2009-05-31 22:47 by 老赵, 23033 visits
摘要:终于到了这个系列的最后一篇文章了,这个系列的文章本是许多话题的基础,却拖了那么长时间还没有完结。这篇文章主要讨论五种缓存方式各自的优劣,以及他们的性能关键在什么地方,如果要进行改进又有什么可选方案。在这个问题上,老赵的思考可能会有遗漏,如果您有任何补充,也请不吝指出。 阅读全文

从汇编入手,探究泛型的性能问题

2009-05-30 05:21 by 老赵, 24012 visits
摘要:经过了《泛型真的会降低性能吗?》一文中的性能测试,已经从实际入手,从测试数据上证明了泛型不会降低程序效率。只是还是有几位朋友谈到,“普遍认为”泛型的代码性能会略差一些,也有朋友正在进一步寻找泛型性能略差的证据。老赵认为这种探究问题的方式非常值得提倡。不过,老赵忽然想到,如果从能从汇编入手,证明非泛型和泛型的代码之间没有性能差距——好吧,或者说,存在性能差距,那么事情不就到此为止了吗?任何理论说明,都抵不过观察计算机是如何处理这个问题来的“直接”。因此,老赵最终决定通过这种极端的方式来一探究竟,把这个问题彻底解决。 阅读全文

泛型真的会降低性能吗?

2009-05-29 16:41 by 老赵, 27459 visits
摘要:在《.NET,你忘记了么?(八)—— 从dynamic到特性误用》一文中,飞林沙同学提到,使用范型会略微降低程序性能,因此在程序中使用List<Ojbect>是不合理的行为,应该使用ArrayList。这一点和老赵平时的观点相悖,老赵一直提倡,在.NET 2.0之后,要尽可能使用List<T>,情愿是List<Object>也不要使用ArrayList。不过个中原因与性能无关,我们稍候再叙述。飞同学的文章让我有了将范型与非范型进行性能比较的想法。这个比较非常容易,不过也得出了一些非常有意思的结论。 阅读全文

写程序时该追求什么,什么是次要的?

2009-05-29 15:14 by 老赵, 23859 visits
摘要:就我看来,一段程序,最该关注的是“逻辑表现”,不该追求的是“性能”。当然,肯定也会有需要追求性能的场景,不过这并不是“追求”出来的,而是在大量经验累计情况下做出的正确决策。就算在那种情况下,“逻辑表现”还是非常重要的。 阅读全文

谈表达式树的缓存(6):五种缓存方式的性能比较

2009-05-26 21:06 by 老赵, 24111 visits
摘要:目前我们已经涉及了五种不同的缓存实现(SimpleKeyCache、PrefixTreeCache、SortedListCache、HashedListCache和DictionaryCache),如果要从一个已经包含n个表达式树的存储中,查找一个有m个节点的表达式树,根据几篇文章的分析,从理论上说除了HashedListCache的时间复杂度是O(m * log(n))之外,其它几种实现的时间复杂度都是O(m)。不过,理论上的结果和实际使用中的效果完全符合吗?那么我们就写一个程序,让数据说话。这是一个控制台应用程序,接受用户参数,并由此生成试验数据,或进行性能比较。 阅读全文

在简单控制台程序中获取并使用参数

2009-05-24 23:12 by 老赵, 23194 visits
摘要:一个简单的处理控制台参数输入的代码片断,没有技术含量,只是在博客上做一个“备份”,方便以后查询。 阅读全文

为视图自定义辅助方法(下)

2009-04-29 22:35 by 老赵, 25309 visits
摘要:在上一篇文章中,我们把繁冗的客户端脚本变成了可以由Visual Studio提示并轻易输出的服务器端辅助方法。但是,目前的做法还有不少可以改进的地方。我们编写辅助方法的目的便是为了简化开发,因此我们还可以在这条路上走的更远,让开发人员可以在使用我们的API时觉得更流畅,更有快感。 阅读全文

为视图自定义辅助方法(上)

2009-04-29 00:24 by 老赵, 22032 visits
摘要:在编写ASP.NET MVC应用程序时,只依赖内置的视图辅助方法很难达到很高的生产力,即使是定义在MvcFutures中的补充类库,也很难满足项目的具体需求。此外,不同的项目有不同的特点,在很多时候也需要定义较为特殊的辅助方法,使开发人员能够更快,更方便地写出更容易维护的代码。这也是自定义视图辅助方法最主要的目的(没有之一)。而这次的文章,便是给出一个这方面的示例,可作为此类问题的一个参考。 阅读全文

使用ASP.NET Abstractions增强ASP.NET应用程序的可测试性

2009-04-23 01:51 by 老赵, 21872 visits
摘要:关于可测试性的重要性,老赵觉得已经不需要再过多强调了。如果您想要获得高生产力,为代码编写单元测试似乎已经是必经之路了。不过可惜的是,ASP.NET应用程序给人的感觉,始终是对可测试性不太友好,其最重要的原因之一在于对HttpContext对象的高度依赖,而我们很难对HttpContext编写Mock或Stub。而现在,我们可以基于ASP.NET Abstraction来辅助ASP.NET开发,改进代码的可测试性。 阅读全文

高阶函数、委托与匿名方法

2009-04-18 12:25 by 老赵, 29743 visits
摘要:这是几个月前就写的文章,只是一直忙于QCon的各项事宜,最近才发表出来。这篇是对.NET中委托,匿名方法和高阶函数使用的一个介绍,非常简单,目的是强调一下C#中对于高阶函数的使用,体现一下现在C#的高度生产力。 阅读全文
使用Live Messenger联系我