cnblogs.com

February 2008 - Posts

本周ASP.NET英文技术文章推荐[02/24 - 03/01]:Silverlight、AJAX、Web Client Software Factory、LINQ、上传文件、GDI+
     摘要: 继续推荐。本期共有7篇文章:

1. Silverlight 2第一印象
2. 《ASP.NET 3.0揭秘》勘误:ASP.NET AJAX认证
3. Web Client Software Factory 2.0发布
4. LINQ.Flickr 1.2
5. 上传文件:多文件、进度条、没有回送
6. ASP.NET AJAX服务器端超时控件
7. ASP.NET中基本的GDI+和图像操作  阅读全文

Dflying Chen 2008-03-01 11:27 发表评论
如何成为一个现代程序员: 使用CPU, 而不是内存
这两天看到不少.NET面试的帖子, 说实话, 那些问题中凡是涉及细节的, 我一概答不上来: 就算今天知道了明天肯定就忘; 事实上, 这些问题在我具体工作中全都处理过. 因为要算计的事太多, 没那个脑子记这些了. 不过我敢保证, 这些问题任何一个也不可能对我的工作造成哪怕一点点的阻碍, 因为在我的能力和理解力覆盖面之内.

尖酸刻薄的说, 我个人认为, 那些问题如果用来面试, 只能用来判断对方对工具使用的程度, 这似乎和高级/架构, 根本挂不上钩.关键是我们在哪个层面工作. 现在的工作, 无论是程序员还是其他的, 哪怕卖保险的, 处理的信息量要远远超过以往; 所以比知道具体信息更关键的是, 如何快速获取并应用信息. 这个只能靠有意识的学习, 体会别人的思路.

比如原文中的兄弟说到: "道理很简单,因为对于一次运行,很可能只用到一个程序集中极少数类型和对象,而大部分可能并不会被使用,此时CLR傻乎乎的给整个程序集都给Compile了,CLR不是傻疯了么"

这个就是个忒别好的方式. 只是那些道理不简单的, 要通过二阶和三阶的知识把他们变成简单的. 比如关于一些工具箱和框架的使用, 看似量很大, 那些红皮书一本700页还是少的. 但是说实话, 把10年的时间用来学习和实践十几本红皮书, 不如学学如何设计更合理, 收集一些不同流派程序员的风格, 练习一下猜测他们进行具体内部实现和设计外部接口使用方式时的心理.

在这些发散的地方有所收获之后, 就会发现, 配合现代IDE, 很多时候一些事情连帮助都不用看, 自然而然就能用得很好. 对于有疑惑的事情, 大不了写个小例子试验一下. 以我的经验, 这花不了多少时间, 忘了的东西(假设比较复杂), 第二遍再用的时候, 一般连例子都不用写, 一见到就能记起的差不多了.

很多事情说白了, 按照我以前的说法, 属于别人设定了这样, 你就得这么用的; 这些我一般不把它看作知识. 比如老赵对其中一个问题的答案: 由于Equals和==操作符都可以重载, 所以不确定. 但是假设C#不提供操作符重载, 这个问题的答案就不一样.

关键是思路, 比如还是这个Equals和==的问题. 你可以连C#提不提供操作符重载都不知道, 遇到这个问题, 首先应该想到的是: 我会不会遇到操作符重载的问题? 这个问题拿屁股想都知道, 会涉及到C#提不提供这个功能. 然后自然就会去查, 查这个事, 用不了5秒钟, 因为连网页和快照都不用打开, 一般瞅一眼搜索引擎出示的片段就知道了. 查到以后, 自然就知道该注意什么问题.

上面的最后一句话, 其实有待商榷. 因为是不是"自然就知道", 取决于你平时有没有收集哪些问题可能是由操作符重载引起的信息. 但是收集这些信息, 并不是要非常细化的, 而是留一个模糊的印象即可. 有了一个线索, 还可以再查嘛. 更多的是感觉: 由于脑子里记得东西少了, 不清晰了, 我们就要加强找感觉的能力. 比如, 我们碰到一个问题, 是由操作符重载引起的可能性为10%, 甚至1%, 我们必须有办法注意到这1%.

不放弃每一个可能的同时, 保证干活的效率, 这个技巧在于遍历: 但是被遍历的数组必须排序, 有优先级的排序; 这个数组中的元素, 则是你要问自己的问题. 如何排序, 看起来只能由具体的情况决定. 这个属于经验范畴, 只能求助于练习和撞墙了. 不过, 我相信, 记住大量的细节和情况, 照样可能因为这些细节犯错误. 有一个会想问题的大脑, 反而比一个面面俱到的记忆, 更加节约时间.

养成了在正确的时候提出正确的问题的习惯(这个动作消耗的时间肯定在0.1秒之内), 接下来就是猜测作者的意图了. 这个事情的关键在于, 我们广泛的观察在生活中, 人们一般如何解决问题. 当然既然干的是软件构件, 对程序设计领域, 更要广撒网的去获取样本: 你知道他们有几种可能方式设计, 并且能快速辨别出来, 自然就能使用的随心所欲.

这个地方主还要锻炼的是联想问题的能力. 因为一个具体领域的问题, 我们可能从来没见过; 但是它很可能和另一领域相似. 当然, 有的时候很可能一点点不相似, 就导致问题的解法集合产生非常大的差异, 怎么办呢? 再拔高一层, 继续收集不同的变化下, 解的集合如何变化的规律呗. 这个实际上是进行了更高阶的抽取.

关键的一个假设我们要有的是, 人都是相似的, 所以脑子和想法也是相似的. 哪怕性格迥异, 最多也就分成几类人, 最后对应的就是几类解法, 基本就是几类人对同一问题, 对应的构思不同. 所以第一件事就是找感觉: 我们现在使用的框架/工具箱的作者是个什么类型的人, 他的构思会是怎么样的? 然后找寻预期中特点, 验证答案; 最后我们确定的很可能是一个混合的风格, 但这没关系, 我们可以观察一下针对一个大问题下的不同子问题, 他做出的选择是什么, 自然就知道他是如何混合使用不同思路的, 为什么混合; 于是在各种场景下, 我们都能很快的找到问题的答案.

对于我来说, 相当关注的就是别人的程序设计风格, 越是刚进入一个领域, 就越在乎和我使用的框架/工具箱的风格保持统一. 哪怕这个风格和我的习惯抵触的很厉害. 因为只有你象他那样做, 你才能做到真正的象他那样想. 当然, 针对"C#是否提供操作符重载"这类问题, 我们要关注的不仅仅是程序设计风格, 更多的是语言设计的理念这些问题. 平时在自己的领域之外, 多关心一下这些问题, 我们不需要实现自己的语言, 也可以逐步的练就熟悉环境的能力. 比如, 一个以类为依托的语言, 提供的特性肯定是一篮子, 这些篮子里一般都会有什么, 这个概念就必须有.

在一个完全陌生的领域, 经过锻炼, 可以把这个Clone期(Clone的是人家身上那股子劲儿), 控制在半个月左右. 过了这半个月, 爱怎么写程序, 就可以怎么写了; 不过恐怕这时候咱们已经进入状态, 除非是特别费时的习惯, 其它的宁愿和咱们Clone的对象保持统一, 而不愿意再改了. 在这里需要注意的一个重点是: 也许你的问题, 和你所使用的框架和工具箱的设计及使用方式, 是格格不入的, 但确实这个第三方的东西又能大幅增加你的效率; 这时候你就要花点时间, 对你的大脑和具体实现做些Adpater了.

我觉得这样的学习和进步的方式, 最大的好处是, 同样的脑力, 获得了更多的东西; 同样的时间, 以"不知道"的方式, 就覆盖更多的内容. 不知道大家看过那些什么16kb展现一个带纹理的3D场景的DEMO没有? 其实道理是相似的, 只是如果3D游戏都那么优化, 反而要花费大量的时间和精力, 这是因为, 对于场景, 纹理, 这些东西, 变化太多, 无法归纳出一个或几个普遍的规律. 而我们人类做事的方式确是可以总结的: 除非是神经病, 否则对于一个人和一类问题来说, 做对的方式一共就那几种.

我们要看到, 人的特征是, 超频容易, 同时人的CPU组属于可编程的硬件, 而且比现在稍微具备类似功能的显卡要强得多: 我们可以针对各种各样的问题对我们的CPU进行优化, 提供捷径, 这就仿佛可以通过编程手段增加MMX/SSE/3DNOW!, 而且可以无限制的扩展. 但是我们的内存却极其有限, 而且我们的机箱太硬: 当然, 即使打开它, 也未必有内存插槽. 不过如果你要是一个过目不忘的家伙, 那么我应该在文章开头提示你点击右上角的x的; 现在只能对你表示强烈抱歉, 以及更多的嫉妒了.

说到底, 在你不可能用到什么重载的时候, 你就不需要关注它; 你只要知道它和它的一帮可能给你造成障碍或帮助的兄弟在那儿, 同时知道干掉它们或驱使它们的秘籍在哪儿得到, 也许还需要知道怎么去拿这个秘籍, 和使用秘籍的几种咒语. 但是, 就像我们设计软件的原则一样, 相比具体问题, 这些能力是可以大规模的重用的.

这就好比玩星际或者魔兽时, 速抄(谁理解这个词? 你们那习惯上怎么叫的?)的话, 当一局结束时, 一般来说一个地图上大多数地方是还是黑的. 当然, 如果是开分矿, 搞堆兵的主儿, 最后地图基本全亮了. 不过我们需要注意的是, 当你的单位不在一个已经探过的地方时, 那里还是罩着战争迷雾. 但这不要紧, 只要你会"探路". 很显然, 不会"探路"的人, 无论他掌握多少极其牛B的技巧, 也不可能赢.

当然, 和"探路"相似和同样必要的技能还有很多, 这里只是拿它做一个代表符号. 我们需要注意到一个现象: 相比一个知道如何造奇美拉或大核的人, 一个在C&C中会"探路"的家伙, 经常玩个几天, 还没有记住各种数据, 就可以开始狂菜前者了. 当然, 并不是所有的问题, 是会"探路"或者一些其它基本技巧就可以解决的. 分辨一个知识属于那种能力, 又是一个话题了. 这个话题更没有想好, 这篇文章已经够长了, 放以后, 或者大家讨论一下吧.

另外, 如果大家觉得我说的话没份量, 也可以看看真正的大师怎么说的(不是原话): 在Stroustrup的访谈和其它一些人的发言中也曾经提到, 不要去关注细节, 而是关注更高层面. 当你真正的理解了问题, 做出了正确的决定和设计, 细节自然而然的会"Fall into place".

当然我不赞成人人都采用这样的方法提高能力: 如果所有人都等着用到的时候再查, 恐怕每一个人都什么也查不到, 最后就便宜出版社了^^. 嗯, 这篇文章只是随便说说. 其实关于怎样成为一个现代程序员, 至少也能写出一本700页的红皮书. 谁要是有兴趣共同创作, 或者帮助这个话题联系出版赚钱等适宜, 不妨联系我, 嘿嘿.


怪怪 2008-03-01 06:05 发表评论
微软推出Visual Studio Gallery站点
     摘要:
Visual Studio Gallery
前一段时间微软发布了一个MSDN Code Gallery站点,用来存放小的代码片段以及SDK等。近期微软又推出了一个Visual Studio Gallery站点,用来展示Visual Studio的扩展或者补充产品,目前站点在推出时,已经提供了过百个扩展。

随着微软在2007年11月份发布的Visual Studio 2008 Shell的广泛应用,相信会出现越来越多的关于Visual Studio的扩展。
  阅读全文

TerryLee 2008-02-29 23:18 发表评论
Web Client Software Factory v2.0发布
     摘要:
WCSF
Web 客户端软件工厂为尝试管理使用 ASP.NET 构建的大型网站的开发人员提供了引人注目的解决方案。此软件工厂支持创建与站点中的各个子目录相关联的模块,并为模式(如 View-Presenter 和 Application Controller)提供了一个可支持以模块化方式启用网站的独立开发、测试和部署的框架,值得我们认真去研究。

现在微软模式与实践团队又发布了Web Client Software Factory v2.0版本,除了支持.NET Framework 3.5和Visual Studio 2008之外,还在2.0中加入了很多小的指导包,称之为“Guidance Bundle”,如Validation Bundle、Autocomplete Bundle等。  阅读全文

TerryLee 2008-02-29 21:07 发表评论
实在令人愤恨--我在微软邮件中发现自己写的贴子被转抄。

我订阅微软的Windows Mobile的邮件,今天回家无意中看到邮件中,有一篇贴子关于Windows Mobile 3.5新特性WCF的使用。我以为是微软关于该技术的总结,没想到令我非常震惊,浏览器跳转到移动解决方案联盟的网站上,我看完了该贴。居然和我在前些日子写的帖子一模一样,都没有丝毫改变一个字。请看该帖子“作者:WM移动解决方案联盟 | 出处:WM移动解决方案联盟”。 从帖子的时间可以看到比我发布的要晚。

我贴图证明:
微软邮件:


该网站的页面:


大家可以访问我的帖子:.Net Compact Framework 3.5对WCF的支持

我不是愤恨该网站,虽然他们的抄袭很无耻.中国就是有那些抄袭的人.
我感叹的是一个微软一个大公司,居然也这样推荐给别人这种并没有好好经过验证的网站的信息.
我感叹我的原创被轻易的剥削.

我该如何保护我的知识产权?
我没有授权任何人可以这样轻易的剥夺我的知识产权.
我希望博客园应该对所有原创帖子进行保护,这些都是作者的心血.被人抄袭的心情有多惨痛.特别是恬不知耻的将作者名字换掉
并在一些知名公司推广时用上.那些原创作者才是真正的受害者.



appleseeker 2008-02-29 20:58 发表评论
一些面试题的回答二
     摘要: 不是标准答案,自己理解的写的,望辩证参考   阅读全文

jillzhang 2008-02-29 18:26 发表评论
.Net 调式案例—实验3 内存(Memory)回顾 System.OutOfMemoryException
     摘要: .Net 调式案例—实验3 内存(Memory)回顾 System.OutOfMemoryException 今天的调试课程中的主要问题是内存的研究。这次我们将压力测试BuggyBits站点,制造高内存使用量并找出原因。这个实验有点长,因为我要讲述内存问题研究的各个方面。一旦尼知道dump文件的中的一些东西和性能计数器中的一些东西的关联你就可以跳过一些方面。但我仍然建议收集性能日志,这样比较完整...  阅读全文

softfair 2008-02-29 17:03 发表评论
baidu的免費代碼

剛才在baidu中逛﹐看到免費代碼﹐發現里面一些功能很不錯﹐于是把它貼到自己的博客上﹐看看右邊欄里﹐體育新聞還可以每刻自動更新呢。不錯吧﹐在此推荐一下這個功能。



清風客 2008-02-29 14:45 发表评论
考虑性能的设计与开发——性能设计

性能问题应该从系统设计时期开始考虑,并延续到系统的生命期终止之时。

具有可伸缩性的系统是指当系统的负载增加一倍,系统需要的资源也同样增加一倍。说起来简单,但在现实环境中确难以做到。由于管理并发用户的开销的增长、锁事务的增长、一致性读负载的增加、操作系统负载的增加、低效的SQL或索引设计导致的过高的I/O等等因素,会导致系统资源的消耗的增长远大于一倍。

破坏可伸缩性的因素:

1.低效的应用程序设计、实施和配置

2.硬件部分的规模不合适

3.软件部分的限制

4.硬件部分的限制  

系统的结构可分为硬件和软件两部分:

硬件部分包括:CPU、内存、I/O子系统和网络模块。

软件部分包括:管理用户接口、实现商业逻辑、管理用户请求和资源分配、管理数据和事务。  

在设计系统时,应该考虑以下几个问题:

系统将支持多少用户?

用户的交互方式是什么?

用户所处的位置?

网络的速度怎样?

用户将访问多少数据?有多少数据是只读访问?

用户对响应时间的要求?

用户是否需要24小时服务?

是否所有的修改需要实时完成?  

应用程序设计原则:

设计简单性原则:

1.如果表的设计复杂到没有人能够完全的理解,那么表的设计可能是比较差的。

2.如果SQL语句过长以致于优化程序无法优化该语句,那么SQL语句的设计、事务和表的设计一定存在问题。

3.如果表的相同列上被重复索引,那么索引的设计可能是有问题的。

4.如果提交的查询没有限定,以致无法迅速的将结果返回给在线用户,那么用户接口或事务的设计是有问题的。

5.如果数据库的调用被许多层软件从应用逻辑中抽象出来,那么,软件开发的方法可能存在问题。

数据建模:应当注意,不要在非核心数据单元上花费过多的时间。

表和索引的设计:选择合适的列进行索引、选择索引类型、注意索引的代价、关注索引中列的顺序。

一个表上如果有3个索引,那么当进行INSERT/UPDATE/DELETE操作时,会比不带索引的表慢大约10倍。

组合索引中,选择性高的列在前查询时需要的I/O更少。选择性低的列在前,有助于代排序操作的查询。

SQL执行效率:

数据库连接管理:应避免没有必要的过多连接。

数据库游标管理:使用cursor和绑定变量,尽量避免硬分析,较少软分析。

硬分析:sql语句第一次提交,并在共享池中无法找到。

软分析:sql语句第一次提交,但是可以在共享池中找到相同的语句。  

实施新的应用程序:

切换方式包括两种:Big Bang Approach(所有用户一次性转移到新的系统上)和Trickle Approach(用户分多次转移到新的系统上)。

性能清单列表:

1.设置MAXINSTANCES, MAXDATAFILES,MAXLOGFILES,MAXLOGMEMBERS和 MAXLOGHISTORY的值高于预期值。避免系统的增长导致必须重建控制文件。

2.设置BLOCK SIZE和优化模式与开发环境中相同。如果测试环境中的所有SQL语句的执行计划都是正确的,可以测试环境中的统计信息导入到正式库中。

3.尽量少修改初始化参数。除了SGA的组成部分和归档目录的设置,其他初始化参数尽量保持默认值,可以为以后性能优化留下一定的余地。

4.通过设置数据库对象的存储参数来管理BLOCK的争用。

5.所有的sql语句应该被优化。

6.验证中间层软件和程序采用高效的方式连接数据库。

7.验证sql语句有效的利用游标。

8.确认所有方案的对象从开发环境移植到了产品数据库中。

9.一旦完成系统的切换,建立数据库和操作系统统计信息的基线。

10.发现最先出现的瓶颈。



飛雪飄寒 2008-02-29 13:04 发表评论
逆序输出单链表
刚刚有人考了我一道题,逆序输出单链表:
我是这样答的(下面的代码为伪代码,不能通过编译):



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->void printSList(slist *pList)
{
    assert(pList);
    
if (pList == NULL)
        
return;

    string str;
    
while (pList)
    {
        str 
= string(*pList) + str;
        pList 
= pList->next;
    }

    printf(
"%s", str.c_str());
}

后来他让我想一想还有没有更为简单的方法了,当时允许我上网,我用了几分钟到网上找了一下,没有找到更好的办法,如果先把链表逆序,再顺序输出时间复杂度更高。

我走出大楼以后,忽然想到,是递归呀,对是递归:



Code highlighting produced by Actipro CodeHighlighter (freeware)
http://www.CodeHighlighter.com/

-->void printSList(slist *pList)
{
    assert(pList);
    
if (pList == NULL)
        
return;
    
    
if (pList->next == NULL)
        printf(
"%s"*pList);
    
else
    {
        printSList(pList
->next);
        printf(
"%s"*pList);
    }
}

哎,人生中机会就是一瞬之间,错过不知道下一次又是什么时候。但只要做了就会收获,会一次比一次做的好。吃饭去了...




胡满超 2008-02-29 11:48 发表评论
自制二进制时钟之三:跳动起来
     摘要: 二进制时钟,你听说过吗,你想实现它吗,进来吧  阅读全文

floodpeak 2008-02-29 11:22 发表评论
实现简单的CSharpShell -- OrcShell (1) 基本结构
 

一、程序的基本结构




 

程序的控制核心是Context类,它持有:

·类型管理器TypeManager,管理该运用程序域加载的命名空间及类型的树,树结构如下:

     TypeDictionary(Root)
         
|--TypeDictionary
         
|       |--TypeDictionary
         
|       |--TypeDictionary
         
|       |
         
|       |--Type
         
|       |--Type
         
|       |
         
|
         
|--TypeDictionary
         
|
         
|--Type
         
|--Type
         
|

其中TypeDictionary对应的是命名空间,Type对应的是类型。TypeManager还管理一个名为NowTypeDictionary,表示当前所在的 TypeDictionary

·AliasCmds ,命令缩写字典。

·Instances,用户变量字典。

·CmdDispatcher是命令指派器。控制台获取指令后传给Context。代码:

            while ((cmd = Console.ReadLine().Trim()) != "exit")
            
{
                
if (!String.IsNullOrEmpty(cmd))
                
{
                    cxt.Invoke(cmd);
                }

                Console.Write(
">> ");
            }

 

Context又传给CmdDispatcher处理。CmdDispatcher解析命令,根据命令的特征选择不同的CmdHandler来处理。目前编写了5CmdDispatcher

CdClassCmdHandler:进出命名空间的处理,针对cdc指令;

ListClassCmdHandler:列出命名空间和类型,针对lsc,dirc指令;

ListInstanceCmdHandler:列出用户变量,针对 my 指令;

ListAliasCmdHandler:列出指令缩写,针对 alias 指令;

CscCmdHandler:编译并运行代码,其它CmdDispatcher 处理不了的都交给它。

CmdDispatcher.Dispatch()方法代码:

 

        public void Dispatch()
        
{
            String[] results 
= InputCmdString.Split(SPLITS, StringSplitOptions.None);
            
if(results.Length == 0return;

            String cmd 
= results[0];
            String mark 
= String.Empty;
            IList
<String> args = new List<String>();

            Int32 argIndex 
= 1;

            
if (results.Length > 1 && results[1].StartsWith("-"))
            
{
                argIndex 
++;
                mark 
= results[1];
            }


            
for(;argIndex < results.Length;argIndex++)
            
{
                args.Add(results[argIndex]);
            }


            
switch (cmd.ToLower())
                
{
                    
case "debug":   // 开启debug开关
                        Context.Debug = true;
                        
break;
                    
case "undebug"// 关闭debug开关
                        Context.Debug = false;
                        
break;
                    
case "cdc":     // 改变命名空间
                        new CdClassCmdHandler(Context, InputCmdString, mark, args).Run();
                        
break;
                    
case "lsc":     // 列出命名空间的内容
                    case "dirc":
                        
new ListClassCmdHandler(Context, InputCmdString, mark, args).Run();
                        
break;
                    
case "my":      // 列出用户变量
                        new ListInstanceCmdHandler(Context, InputCmdString, mark, args).Run();
                        
break;
                    
case "alias":   // 列出alias列表
                        new ListAliasCmdHandler(Context, InputCmdString, mark, args).Run();
                        
break;
                    
default:
                        String fullCmd 
= Context.GetFullCmd(cmd);
                        
if (fullCmd != null)    // 处理 alias
                        {
                            
if (mark != null) fullCmd += " " + mark;
                            
if (args != null && args.Count > 0)
                            
{
                                
foreach(String s in args)
                                
{
                                    fullCmd 
+= " " + s;
                                }

                            }


                            Context.Invoke(fullCmd);
                        }

                        
else                   // 编译代码并运行
                        {
                            
new CscCmdHandler(Context, InputCmdString).Run();
                        }

                        
break;
                }


            
return;
        }




xiaotie 2008-02-29 10:14 发表评论
实现简单的CSharpShell -- OrcShell (0) 简介

      IDE总是笨重不堪,于是我们需要一个简单的控制台Shell去执行一些简单的语句,做一些简单的任务。就把它叫做 OrcShell,暂且需要这个简单的Shell具备以下功能:

1)浏览类型:

(a)像列出当前目录下的子目录和文件一样列出当前命名空间下的类型及下属命名空间(指令:lscdirc ls dir 保留,留待操作目录)


(b)像进出目录一样进出命名空间(指令:cdc cd 保留,留待操作目录)

如图,其中N代表是命名空间 namespaceC 代表的是类 Class

(c)查看指定类型


2)执行少量代码

       ·能够运行CSharp代码片断,不同的代码片段间能够共享变量



3)其他功能

       ·方法扩展

       ·Alias功能



此后诸文将简述OrcShell 的结构和实现(点此下载代码可执行程序,运行环境 .net 3.5)。



xiaotie 2008-02-29 10:05 发表评论
提十个有点难度关于.Net CLR,GC有趣的PopQuiz

近日研究CLRGC,在msdn blog上面看到MS CLR测试小组的一个女技术员提出了十几个问题,感觉问题都挺有趣,也有一定的难度,遂加以修改,删除了几个又添加了几个,广泛征集回答 ^_^

 

1.         一个托管进程,如果运行在一个双核CPU的机器上,GC是运行于Server GC模式,在假设CPU没有Hyper thread功能的话,这个托管进程会有几个GC Thread?可以用调试工具来证明你的判断吗?

2.         在一个多核的服务器上,如果运行一个winform app程序,这个程序对实时响应的要求比较高,应该使用哪种GC模式?为什么?(可以选择Server GCWorkstation GCConcurrent-Workstation

3.         在什么情况或者什么操作下,会进行一次垃圾回收?

4.         什么使一个ObjectGeneration 0移动到Gen 1,或者是从Gen 1Gen 2Pinned Objects呢?

5.         如果一台机器是四核CPU,在运行Server modeGCWorkstation ModeGC的时候,分别有多少个GC Heap

6.         Dotnet Framework 2.0下,如果发现一个进程里面加载了mscorwks.dll,那么可以因此判定这个线程是运行在Workstation ModeGC下面?

7.         可以手工的改变一个进程的GC运行模式吗?在什么样的情况下如何修改?

8.         为什么要在打开一个数据库连接时候用完了就关闭这个连接?GC不会给我们处理这些事情么?

9.         Strong ReferencesWeak ReferencePinned Reference有什么区别?

10.     Large Object Heap中,所有的大对象是没有经过筛选顺序堆放在一起的吗?


也没有真正的标准答案,回答的有理有据就对。 

如果大部分的问题对于你来说都是小case,那么赶紧告诉我你的msn吧,俺这里还有一大票Puzzling Question Queue…..



lbq1221119 2008-02-29 09:58 发表评论
微软 "十大杰出 IT 英雄" 公布!看看园子里有几个?

姓名  年龄   性别  公司 上榜理由
赵劫 23 上海激动通信有限公司
上海百盛网络技术有限公司
Webcast 优秀讲师,博客访问量巨大,优秀论坛版主
 葛涵涛  26 北京拓杰凯业科技有限责任公司 北京.NET俱乐部主席,社区贡献极大
苏鹏 28 中国网通 Webcast优秀讲师,共回复1万多封用户问题的邮件
杨永刚 30 新疆电信信息业务分公司 “天下博客”的创始人,并创办新疆地区唯一的有规模的学习微软技术组织
王翔 29 全国海关信息中心 在本职工作中使用基于.NET业务应用发开,公钥技术开发,并在社区分享知识和经验
张跃 25 世界500强企业 设计企业IT基础架构规划,服务器产品故障处理等
朱炜 29 深圳富士康科技集团 带领团队负责IT部门服务器运维,管理系统建设,引入及部署。并在IT Pro City 中分享经验
崔新军 26 SM&W有限公司 曾负责建外SOHO等区域的网络运营和管理工作,同时在51CTO博客访问量大
贾菡   北京一维天地科技有限公司 CRM技术专家,在社区分享知识,并帮助客户实施微软的解决方案
张琦 32 北京石景山古城高级中学 负责网络维护与应用推广,信息中心与校园网规划。著名报刊杂志专栏作家,大型技术论坛嘉宾。



转自: http://news.csdn.net/n/20080227/113904.html


万一 2008-02-29 01:07 发表评论
More Posts Next page »