Anders Liu (lover_P)的.NET天空

传播知识基于掌握知识,但又高于掌握知识。我要做一个掌握很多知识的传播知识的人!

刘彦博ID:loverP
108367次访问,排名786好友0人,关注者5
loverP的文章
原创 35 篇
翻译 5 篇
转载 0 篇
评论 190 篇
Anders Liu的公告


我写的书


购买途径:
最近评论
mldstk:wow power leveling
l763820708:有-在17号端口
txfast:这些话说的比较实际,其实说学习能力强只是一句空话,因为刚进公司,谁能够认可你的学习能力强,谁又能否定一个人的学习能力?
Wind_Eagle:想不到情人节还有心思写博客呀!不错,我有同感 !
heaso14:照着做了 还是有问题啊...

1>MSVCRT.lib(crtexew.obj) : error LNK2001: 无法解析的外部符号 _WinMain@16
1>C:\Documents and Settings\Administrator\My Documents\Visual Studio 2005\Projects\a\PureC\Rele……
文章分类
收藏
    相册
    MVP Logo
    文章用图1
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    翻译 JIT收藏

    新一篇: Tech Ed 2006流水账 | 旧一篇: Tech Ed 2006召开在即

      这两天一直在准备Session,从老外的PPT里发现,原来.NET CF 1.1中,支持两种JIT——sJIT和iJIT,赶紧搞搞明白。没想到google到了这样一篇文章,学习一下搞明白了。于是草译出来给大家分享。

      原文在:http://www.danielmoth.com/Blog/2004_12_01_mothblog_archive.html

    ----

      现如今,所有的.NET开发者都知道托管代码(用C#VB.NET写的)都是被编译成中间语言(ILIntermediate Language)的,在运行时,再由即时编译器(JITJust-In-Time)编译成本机代码。这里我们对.NET CF中的JIT引擎和桌面(.NET“完整版”)进行一个比较,并看看.NET CF 2.0中的变化。

      回首往事,alphapre-RTM)版的CF并没有JIT编译器,IL都是在设备上进行解释的。直到RTM版本的出现(关于CF的版本请看这里),设备上的IL才被JIT成本机代码。这种编译以方法为单位(和完整版一样)。当调用一个方法时,如果没有与这个方法对应的本机代码,则IL被编译为本机代码并执行;下一次只要直接执行该方法的本机代码即可。这意味着JIT带来的性能损失只会出现一次。

      主要的区别在于CF将本机代码环存在GC堆里(也就是RAM里),并且在发生完全GC时会发生性能“颠簸(Pitching,不知道这么翻好不好)”(有关GC的阶段,请参见这里)。换句话说,JIT生成的本机代码,会因为内存压力的增大而被丢弃,因此下一次调用一个方法时,还要重新进行编译,因此性能发生了颠簸(忽快忽慢的意思吧?)。不要把Picthing方法和实际类型的数据结构(元数据)搞混,元数据只要加载完毕后就不会“颠簸”。

      要获得你的CF应用程序的有关数字(数据),请使用性能计数器。尤其关注这几个:Bytes JittedNative Bytes JittedNumber Of Methods JittedBytes PitchedNummber Of Methods Pitched

      另外一个区别就是.NET CF不支持ngen。因此您不能将程序集预编译成本机镜像。

      最后,JIT生成的代码大小被限制为64K(译注:2.0里据说取消了这个限制)。您不能超过这个限制,但大型的窗体可能会导致自动生成的InitializeComponent方法的大小超出这个限制。解决的方法就是把这个方法拆分成多个比较小的方法(代价就是失去窗体设计器支持)。

      CF 1.0中有两种JIT编译器:sJITiJIT。前者专用于ARM设备,后者用于其他架构的CPU(包括SH3MIPSx86)。sJIT在将IL编译为本机代码时要耗费比较长的时间,但生成的代码比iJIT生成的快(这个PPT中有详细的说明)。

      CF 2.0使用统一的JIT,这比现有的JIT更高效,经过的优化更多。随VS2005发布的模拟器使用ARM架构的CPU(而不是现有的x86架构),所以从性能的角度来看,强了许多。

      如果您还记得我读过的所有CF的书,我可以告诉您Building Solutions with the CFCF Kick Start两章都有一些段落是描写JIT的。.NET CF Bible也贡献了几页,用于介绍JIT代码池/本机镜像缓存。

      新年快乐!(没办法,原文041231号写的。)

     

    发表于 @ 2006年09月19日 19:55:00|评论(loading...)|编辑

    新一篇: Tech Ed 2006流水账 | 旧一篇: Tech Ed 2006召开在即

    评论

    #宋元超 发表于2006-09-23 09:47:00  IP: 222.135.92.*
    刘老师您好:

    我遇到一个问题,在移动webform中放一个textbox然后让它在页面加载的时候能自动得到焦点,类似超市收银扫条码的程序。我用的是textbox.focus() 方法,但是运行的时候出InvalidOperationException 提示“必须存在 runat=server 的窗体标记,才能使用 SetFocus() 或 Focus 属性
    当您在 Visual Studio 调试器中运行代码时,如果您从一个线程访问某个 UI 元素,而该线程不是创建该 UI 元素时所在的线程,则会引发 InvalidOperationException。调试器引发该异常以警告您存在危险的编程操作。UI 元素不是线程安全的,所以只应在创建它们的线程上进行访问。。”

    是多线程的问题么?还是出现命名空间冲突?

    这个问题困扰我很长时间了,希望您能在百忙中抽空解答一下。
    http://community.csdn.net/Expert/topic/5008/5008776.xml?temp=.7688715
    http://community.csdn.net/Expert/topic/5014/5014965.xml?temp=.6140406
    我的信箱:sycdirdir@163.com
    此致
    敬礼!

    宋元超
    发表评论  


    当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
    Csdn Blog version 3.1a
    Copyright © Anders Liu