Hello World
Spiga

归档:2009年11月

相同类型的每个对象大小都是一样的吗?

2009-11-30 14:09 by 老赵, 5632 visits
摘要:快速回答:“相同(引用)类型的每个对象大小都是一样的吗?”其实个问题对于大多数情况下来说应该正确的,不过的确也有些类型受到CLR的特殊照顾,因而有那么些例外。我现在尝试使用一些简单的小实验来进行验证,当然它是不严谨的,只能算是一个简单尝试而已。 阅读全文

验证fixed关键字效果的小实验

2009-11-29 21:11 by 老赵, 5297 visits
摘要:之前谈到String连接操作的性能,其中会涉及到unsafe操作,而unsafe操作必然会涉及到指针,于是fixed关键字也应运而生。fixed关键字是用来pin住一个引用地址的,因为我们知道CLR的垃圾收集器会改变某些对象的地址,因此在改变地址之后指向那些对象的引用就要随之改变。这种改变是对于程序员来说是无意识的,因此在指针操作中是不允许的。否则,我们之前已经保留下的地址,在GC后就无法找到我们所需要的对象。现在就来我们就来做一个小实验,验证fixed关键字的效果。 阅读全文

视频:Microsoft PDC 09,算法及数据结构内容及其他

2009-11-27 13:57 by 老赵, 6511 visits
摘要:这里又有一些新整理好的视频。Microsoft PDC 09是最近的重头,只要您是搞微软技术的,无论关注哪个技术方面,都可以找到许多有用的内容。我也经常从此类大会中了解许多平时不太关注的内容,也算是保持知识的新鲜度。此外,还有算法和数据结构相关的内容,以及有趣的Visual Studio纪录片。 阅读全文

重谈字符串连接性能(上):性能评测

2009-11-26 01:12 by 老赵, 15395 visits
摘要:看到这个标题是不是觉得很奇怪呢?字符串连接的性能,这个话题已经被谈了一遍又一遍,一次又一次,似乎已成定论,这又有什么好谈的呢?不过说来奇怪,根据我的实验结果在网上进行搜索,却找不到答案。因此,我现在和大家一起重新再作一次实验并观察结果。在文章最后我也会给出完整的代码,您可以自由地运行,修改,尝试,我们再一起进行交流。 阅读全文

一系列技术视频:MIT 6.00,Channel 9 E2E,FP Foundamentals

2009-11-25 10:12 by 老赵, 7843 visits
摘要:最近看一些技术视频上瘾,每天都要看一两个才满足,有时还会整理整理总结总结。视频的来源主要是Channel 9等外国网站,它们往往必须下载到本地才能观看,代价太高。在线看的也不是没有,不过要么就在Youtube等国内无法访问的站点上,或者就因为国内没有CDN导致播放不畅。因此,我正在把一些视频上传到号称国内第一视频站的优酷上,这样便可以比较方便的播放,甚至可以拖拖看看。目前我准备了三个系列,并且还在不断地进行搬运和整理工作。 阅读全文

关于浮点数计算时的精度问题

2009-11-24 14:21 by 老赵, 10269 visits
摘要:那个有问题的缩略图生成的方法发布之后,短短半天就有很多朋友响应,其中指出了不少方法中的不少问题,有些也是我没有意识到的。果然集体的智慧是无穷的,一段代码在许多人的眼皮底下经过,想留有bug也不容易。不过,我在这里只能谈一下我写那篇文章的本意了,我认为那篇文章中最主要的问题是,在计算图片尺寸时没有处理好浮点数计算的精度问题。 阅读全文

您能看出这个生成缩略图的方法有什么问题吗?

2009-11-24 00:32 by 老赵, 9209 visits
摘要:昨天又使用了某个多年以前写的,或者说是“收集”而来的方法。这个方法的作用是根据一幅图片(一般是幅大图)生成它的缩略图。这个方法用了许多年了,一直没有去怀疑过它的正确性,但是昨天忽然发现它一直以来都存在一个问题,虽然可能不是那么明显,而且也不会造成太大问题(否则早就发现了)——但是,这的确是个不妥的地方。这个问题在我看来也有一定借鉴意义,因此我打算把它展示出来。那么,您能否看出它究竟是错在什么地方了呢? 阅读全文

老赵书托(3):深入理解计算机系统

2009-11-23 00:10 by 老赵, 33689 visits
摘要:如果说我上次推荐的SICP强调的是编程能力,抽象能力的话,那么CSAPP这本书强调的便是作为一个程序员的基本知识。SICP来自世界顶级学府MIT,而CSAPP也同样出身名门:CMU(卡耐基梅隆大学)。虽然没有SICP那么历史悠久,但它被世界几百所大学(幸运的是也包括我所就读的复旦大学)用作教材也有好多年了。不过我很不喜欢它的中文译名《深入理解计算机系统》——如果有人说它“底层”,我同意。但如果说它“深入”,至少我不那么赞同。 阅读全文

再谈Attribute性能优化方式:使用CCI Metadata

2009-11-20 10:47 by 老赵, 6642 visits
摘要:Attribute使用了反射,密集调用时会带来较大开销,因此我们上次提出了一些优化方式,这样就不会产生性能方面的问题了。这个优化方式的关键,主要是使用直接获得构造Attribute的元数据,然后自定义它们的生成方式并缓存,这样就避免了每次获取元数据及反射构造Attribute的开销。我从一开始就抱有这个优化的“思路”,但是上篇文章中最终的做法是受到了heros同学的提示才得出的,因为我一开始还根本不知道CustomAttributeData这个已然内置的类库。我当时在探索的方向是使用CCI Metadata读取程序集中与Attribute相关的元数据。 阅读全文

URL生成方式性能优化结果

2009-11-19 10:33 by 老赵, 17779 visits
摘要:继上次发现URL生成的性能问题之后,我最近一直在关注一些细节的性能优化。这些优化方式不是宏观的,理论的,而是在实践上对相同问题的不同做法进行探索。我把探索的过程和结论都发布在博客上了,从结果上看性能提高是比较明显的。但是,把它们用于解决实际问题时,效果又会如何呢?我把MvcPatch进行了一些修改,然后再使用UrlGenBenchmark进行了一番比较。 阅读全文

Attribute操作的性能优化方式

2009-11-18 10:09 by 老赵, 19648 visits
摘要:Attribute是.NET平台上提供的一种元编程能力,可以通过标记的方式来修饰各种成员。无论是组件设计,语言之间互通,还是最普通的框架使用,现在已经都离不开Attribute了。迫于Attribute的功能的重要性(Kent Beck认为NUnit比早期JUnit设计的好,一个主要方面便是利用了Attribute),Java语言也在5.0版本中引入了与Attribute类似的Annotation概念。不过Attribute说到底也是一种反射操作,平时正常使用不会带来问题,但是密集的调用还是对性能有一定影响的。这次我们就来总结看看我们究竟可以如何回避Attribute操作的一些性能问题。 阅读全文

《链接、装载与库》里的一个错误:关于调用栈

2009-11-17 00:29 by 老赵, 19911 visits
摘要:周六老同学聚会,出门前随手从桌上抓起了《程序员的自我修养——链接、装载与库》在路上翻。自从武汉博文出版社的周筠老师送给我这本书后,我基本上还没怎么看过。对这本书第一感觉是“标题党”,主标题起大了,虽然经过解释之后并非无法理解,但还是不太喜欢。但书还是好书,已经看完大半,而且基本上会在近期找个方式推荐一把。不过现在我想细说的并不是推荐相关话题(如适合谁看,该怎么看,结合什么一起看等等),而是想指出书中还未被《勘误》收录的一个错误:P288讲调用栈时,文字描述和配图上的问题。 阅读全文

并发环境下的缓存容器性能优化(下):性能测试

2009-11-16 00:29 by 老赵, 18832 visits
摘要:上一篇文章里,我谈到对于某些场景中的缓存容器,其写操作非常少,到了程序后期甚至为零,而对它的读操作却几乎是密集连续且无穷无尽的。对于这样的容器,如果使用ReaderWriterLockSlim去进行保护每个“读”操作,这开销是在有些多余。因此我提出了“不可变”的哈希表,目的是在保持读操作的时间复杂度为O(1)的情况下,尽可能避免多余的开销。现在我们便将它和其他几种时间进行一个性能的对比。 阅读全文

“表达式树”配合“泛型参数字典”定义通用操作

2009-11-13 13:53 by 老赵, 18497 visits
摘要:上午有朋友提出了这么一个问题:如何定义一个通用的相加操作。其实这可以利用“泛型参数字典”和“表达式树”配合完成,也有着非常优秀的性能。于是,我们便可以定义一个比.NET框架自带的Enumerable.Sum强大许多的扩展方法了。 阅读全文

F#版本的CodeTimer(已支持CPU时钟周期统计)

2009-11-13 10:49 by 老赵, 16978 visits
摘要:CodeTimer很好用,自从在今年三月在.NET技术大会上看到Jeffrey Richter用类似的东西之后,我就自己写了一个。不过,当时是用C#写的,现在我需要在F#里做相同的事情就不那么方便了。当然,F#与.NET本是无缝集成,因此C#写的CodeTimer也应该可以被F#使用。不过,我平时在使用CodeTimer时并不是通过程序集引用,而是使用代码复制的方式,因此如果有个F#版本那么应该使用起来更加方便。 阅读全文

并发环境下的缓存容器性能优化(上):不可变的哈希表

2009-11-12 00:03 by 老赵, 20994 visits
摘要:我们在项目中经常会遇到这样的场景:一些信息读取开销较大,但只需要生成一次便可反复使用,因此我们会将其永久地缓存起来。例如在ASP.NET MVC中,系统会根据Controller的名称来缓存对应的元数据。这些缓存容器都有一些共同的特点,便是存储的对象数量有限(少则几十,多不过数千),但都需要在并发环境下被大量地读取,因此必须是线程安全的。那么,我们该如何设计这样的容器呢? 阅读全文

缓存方式与对象创建的性能比较

2009-11-11 14:28 by 老赵, 19670 visits
摘要:由于Lambda表达式构造URL的速度不佳,我最近对于性能上的细节问题进行了一些探索和尝试。对于很多问题,以前由于不会形成性能瓶颈,因此并没有进行太多关注。还有一些问题可以“推断”出大致的结论,也趁这个机会进行更详细的试验,希望可以得到更为确切的结论和理性的认识。这次我打算做的实验,是关于对象的缓存与创建的性能比较。在某些情况下,我们会将创建好的对象缓存起来,以便今后进行复用。但是不同的缓存方式会有不同的性能,因此……我们现在便来试试看。 阅读全文

一次失败的尝试(下):无法使用泛型的Attribute

2009-11-11 00:07 by 老赵, 17558 visits
摘要:原本打算两篇写在一起,但是我认为这两个话题本身并没有太大关联,因此分开,便于查询。其实在构建Attribute的时候,我们经常会从构造函数中传入一个Type类型,然后在Attribute中使用Activator.CreateInstance或其他的“反射”方法来构造对象。那么,我忽然想,为什么不能使用泛型的Attribute呢?有了泛型便可以利用静态检查,也可以获得其他有用的特性。只可惜,C#并不支持在Attribute中使用泛型……而且这点在C# 4中也基本不会有所改变了。 阅读全文

如何对一个博客系统进行CSS管理?

2009-11-10 19:56 by 老赵, 16706 visits
摘要:忽然发现,我的博客皮肤又改变了,这次是About栏。我在我的博客版式上投入了很大的精力,动用了大量的JavaScript和自定义CSS,希望可以让浏览效果更加“和谐”。可是,博客园在样式管理上似乎经常会出现一些问题,时不时让一些基础的样式修改破坏了版式。为什么这样的事情总是一而再,再而三地发生呢?这无法不让我多想一些。似乎这次的问题是由两方面原因造成的:1) 博客园修改了过于宽泛的选择器 2) 皮肤的样式直接依赖了最基础的样式 阅读全文

一次失败的尝试(上):原来GetCustomAttributes方法每次都返回新的实例

2009-11-10 00:08 by 老赵, 17837 visits
摘要:前一段时间我在比较各种URL生成方式性能的时候,其实已经为利用Lambda表达式的做法进行了优化。在优化之前,使用Lambda构建URL的性能比现在的结果还要慢上50%。性能低下的原因,在于每次都使用GetCustomAttributes来获取参数(或其他一些地方)标记的Custom Attribute。这里应该用到了反射,在这种密集调用情形中性能急转直下。 阅读全文
1 2 Next >
使用Live Messenger联系我