.Net技术大会 Day 2

22
Feb
5

第2天的.Net技术大会感觉明显不如第一天,整个第2天的主题比较偏向于实际应用的技术,内容涵盖WPF, Silverlight, WF, SQL Server, SharePoint, BizTalk, ASP.Net MVC等,但是很多相关的演讲都停留在比较初级的入门层面,大概就是介绍一下这些技术,然后做一些很简单的Demo,比较缺乏深入的内容。第2天也有一些关于项目管理和过程的演讲,如《敏捷项目管理》,《微软软件研发方法与过程》,这2场听的人都非常多,相比之下同时间段的Silverlight,SharePoint,WF,SQL Server BI这些场次就显得比较冷清了。这也可以说明一个现象,看来国内的程序员大部分都希望转型向管理方面发展,对管理的内容很感兴趣,想静下来做技术做到老的程序员很少,当然这也和国内的软件大环境有关。记得第1天技术大会最后的论坛活动上有人就问了Jeffrey这样一个问题,说大多数程序员都认为30岁是一个坎,过了30岁还在做技术就很痛苦了,问Jeffrey怎么看这个问题。Jeffrey当时听到这个问题觉得非常的惊讶,不能理解为什么国内的程序员有这个想法。这也从另一个方面说明了中国软件行业和欧美发达国家软件行业相比,重于管理远远大于重于技术。另外这天还有一场是《SQL Server性能优化关键路径》,这场也是人满为患,让同时间段的另外两场显得很冷清,这里还是可以看出一些共性,目前的企业开发中,数据存储方案是对性能影响最大的因素,也是开发人员关注最多的问题,很多开发人员都提问问到自己的数据量非常非常大,上TB上千万记录的数据量如何进行存储优化的问题,可见数据和对数据的处理确实是现在企业应用系统中很关键的一个环节。
第2天的有些场次我没有全程听完,而是根据内容,在不同的场次之间进行了一些调整。我总共参与的场次有Matt Gibbs的《Building Web Applications with .Net Now and Future》,彭爱华的《Windows平台安全框架与设计经验谈》,胡百师的《敏捷项目管理》,段凌的《SQL Server性能优化关键路径》,郜建和李丛昱的《深入浅出WF4.0》,高焕堂的《创意,接口与架构设计》,刘浩的《BizTalk企业应用集成方案深度演绎》。

下面还是简要记录一下各场的大致内容,回成都后再仔细整理:

《Building Web Applications with .Net Now and Future》:这一场没有太多深入的东西,Matt Gibbs给我们大致描述了一下ASP.Net下一代的一些新特性,包括VS2010中对HTML, JS, JQuery代码编写的更好支持,新的输出缓存架构,下一代的ASP.Net Web Form(包括支持static mode的ClientID,URL Routing,对SEO的支持,对ViewState的改进等),ASP.Net MVC,ASP.Net Data和Dynamic Data,ASP.Net AJAX的升级等。这些内容其实就是一个新特性的展示,在网上可以找到好多更详细的描述,所以选听这个场次让我比较后悔,应该多花点时间去听听同场的《Windows平台安全框架与设计经验谈》。

《Windows平台安全框架与设计经验谈》:这一场的内容应该是比较深入的,但是我只听到尾巴上一点,彭爱华先生首先讲解了基本的安全概念,随后深入讲解了Windows中的安全机制;包括域,活动目录,本地安全授权机构,Window内部验证原理(登录会话,令牌,网络验证,Windows窗口站,Winlogon)等,下来我找到这场的录像后会再仔细看一次。

《敏捷项目管理》:我也没有免俗,来听了这场项目管理方面的演讲,因为同时间段的其他内容我都不是太感兴趣。这场其实也没有太多新东西,大多数的概念和敏捷思想早已是大家耳熟能详了,胡百师先生结合自己的实际经验讲解了如何在项目管理中运用敏捷思想。总之我觉得项目管理往往都是说起来是这样,做起来又是另一回事,敏捷项目管理最核心的因素是人,所以你的团队是否敏捷,完全取决于你的团队中有怎样的一群Member。

《SQL Server性能优化关键路径》:说实话,这场听的我很晕,而且刚好又是吃完午饭后的第一场正是昏昏欲睡的时候。原本我以为本场的内容是和开发相关的,比如如何优化SQL之类的话题,但是听了一会就发现原来这场的内容是完全给DBA讲的。段凌小姐按影响程度从高到底描述了SQL Server性能瓶颈的一些影响因素,从锁和Page Latches产生的性能瓶颈到磁盘IO,CPU,内存,网络对SQL Server的性能影响等问题以及这些问题的识别和解决方法,比如如何在32位系统上开启SQL Server AWE,让SQL Server的data cache能够使用超过1.7G的扩展内存从而解决内存瓶颈等问题,当然这些都应该是DBA需要了解的内容。

《深入浅出WF4.0》:这场内容同样也很浅显,我觉得只能算浅出了,完全没有深入。本场演示了一些WF4.0的新特性,一些新的特性确实还是很不错的,比如支持复杂规则的定义(这样我们公司就可以在以后使用WF4.0代替现在使用的ILog了,毕竟ILog实在是很昂贵),又比如通过简单的编码可以将原本只能在设计时期才能看到的流程设计视图直接暴露给用户使用,在WF3.0中实现类似的功能需要大量的编码,还有就是对事物流的支持等。看来有空我得花点时间研究下WF了,看看除了工作流外,把它作为一个轻量的BPM是不是也是可行的。

《创意,接口与架构设计》:高焕堂先生算是台湾的牛人了(拿anrs的话来说是OO太空人),不过说实话本场的内容让我挺失望的,翻来覆去就讲了一些基础的OOD和OOA知识,,导致我中途就逃跑去听另一场《BizTalk企业应用集成方案深度演绎》去了。不过高Sir对中国文化的了解确实很深,能把易经八卦和修长城这两件事联系到架构设计上来真是前无古人后无来者了啊。

《BizTalk企业应用集成方案深度演绎》:这场又只听了个后面的尾巴,前面SOA和BPM的内容没有听到。刘浩先生主要讲了BizTalk 2006 R2版本里面的一些基本概念,比如端口,消息映射和事物补偿等,然后讲解了一些他们应用BizTalk 2006 R2进行实际企业SOA集成时的几个案例。

OK,公司布置的任务基本完成啦,回到成都后整理一些可以share的内容,然后再给大家分享了。

Filed under: .Net

.Net技术大会 Day One

21
Feb
5

由于飞机误点,20号凌晨1点才到上海,到了酒店已经2点过了,睡了5个小时就昏昏沉沉的赶往会场开始了第一天的.Net技术大会。第一天的会议我总共选听了 Jeffrey Richter的Keynote《The Performance of Every Day Things》,张银奎的《使用WinDBG+SOS深入理解托管世界》,温昱的《Effective Architectural Design: 架构设计的10条经验》,郭晓颖的《使用Silverlight构建企业级RIA应用-现在与未来》,Jeffrey Richter的《Building Responsive and Scalable Applications》。
虽然没有休息好,但是听Jeffrey Richter的Keynote时还是打起了精神,一天5场演讲下来让我感觉收获最多的是Jeffrey的2场和张银奎的WinDBG那场。这里说一些细节:1. Jeffrey的语速极快,好在发音比较清楚,配合打印的讲义我勉勉强强跟上;2. 中午休息的时候Jeffrey签名兜售他的两本著作《CLR via C# second Edition》和《Windows via C/C++》,我买了一本《CLR via C# second Edition》;3. 张银奎的关于WinDBG演讲很有意思,不过关于C#析构函数和GC的一个细节有一点小错误。4. 根据我的观察,参会的牛人还是挺多的。

一天参加5场培训,内容很多,煞费体力,要都记下来很难,下面简要记录一下我参与的5个场次演讲的大体内容,待我全部整理好回到成都后再和同事们详细分享:

Keynote《The Performance of Every Day Things》:Jeffrey用一个精心设计好的Demo向我们展示了很多.Net代码中的性能问题并解释了各种性能测试结果的深层原因,虽然都是一些非常细节的东西,但是这些细节比较有用,而且一些细节也是我在平时写程序中没有用到或是没有关注过的一些知识点,比如check和uncheck的性能差别;普通参数和可变参数的性能差别;迭代和普通loop的性能差别;普通调用,通过委托调用,通过反射调用静态方法,实例方法,虚方法的不同性能;.Net中提供的不同种类的Monitor,Mutex的性能差别等。另外从Jeffrey的Demo中我们也可以学习到一些测试和调试性能问题的好方法。

《使用WinDBG+SOS深入理解托管世界》:以前竟然没有听过WinDBG真是很惭愧,原来这东西一直伴随着MS内部开发x86 OS内核,可以说NT这样的x86系统内核就是MS的牛人们用着WinDBG给调出来的。SOS是在.Net时代用WinDBG调试.Net托管进程的一个插件。这场演讲偏向系统底层,对于我这种已经远离底层十万八千里的企业应用开发程序员来说还是比较有难度的,但是张银奎先生的讲义和示例都做的很不错,还是很容易听懂的。张银奎先生在这场演讲中向我们从头到尾展示了一个托管进程的加载运行过程。从系统内核态的进程创建和内核模块加载以及初始线程执行,.Net mscoree引导_CoreExeMain,到加载CLR, 创建Domain,启动辅助调试线程,创建GCHeap和GC工作线程,再到从PE文件解析CallHeader,加载JIT模块,JIT开始进行,执行即时编译后的托管Main函数这一系列过程,向我们完整的演示了.Net托管进程的创建和执行过程。最后我们发现实际上托管进程和普通进程并没有什么区别,所有的过程和细节以及用到的技术手段和普通的Win32进程几乎完全一样,只有最后JIT的机制有别于普通的Win32进程,所以我们可以说托管进程就是具有JIT机制的Windows进程。演讲的最后一点时间,张银奎先生还为我们演示了如何用WinDBG来观察.Net GC的执行等话题。

《Effective Architectural Design: 架构设计的10条经验》:这场演讲收获并不是太大,讲的都是一些老生常谈,我自己平时也都有思考过的一些问题。温昱先生结合自己的经验提出了一些观点和经验总结。

《使用Silverlight构建企业级RIA应用-现在与未来》:这场演讲也几乎没有什么收获,就是MS的广告时间和Toy Show而已。纯当为下一场的Jeffrey演讲之前的休息和换脑时间。

《Building Responsive and Scalable Applications》:非常不错的一场演讲,不过Jeffrey讲的比较激动,语速更快,而且停顿极少,让我差点没跟上 本场Jeffrey同样用很有趣的例子向我们展示了何为Responsive和Scalable的程序,让我们知道了想一味的靠创建线程来增强程序的性能和响应是极其愚蠢的事情。相反在一些场景中我们应该避免多线程,因为创建和释放线程的开销是巨大的,而且无论我们创建多少个线程,单核CPU在同一时刻只能执行一个线程的代码,双核CPU也仅仅能同时执行两个线程的代码而已。多线程仅仅是CPU会为每一个线程分配一个时间片,然后在这些时间片中不停的switch到不同的context执行而已,这只是会让每一个线程的工作都有时间执行一点点,不至于长久等待,从而表面上是增加了可响应性,但实际上并不会带来性能的真正提升,另外CPU进行switch的开销也并不小。Jeffrey向我们展示了一些伪异步程序的示例,例如现在很多进程中开启了很多线程,然而大多数线程都处于block状态,什么都没有做而只是在那里浪费资源的实事,甚至我们平时不经意写出的代码也有这样的问题,这样的程序的确是不可伸缩的,他们的吞吐能力和性能并不会随着我们增加在硬件上的投资而成线性的增长。如何利用Thread Pool来使用多线程,如何避免线程的Block,如何进行真正的异步编程,从而建立真正可伸缩的应用?这些问题在Jeffrey的这场演讲中都给出了很好的答案。

OK,就到这里,关于.Net技术大会Day Two的报告稍后奉上。

Filed under: .Net