ly\NativeImages_v2.0.5XXXX
那些文件夹里面存的是什么啊??
#40楼 2008-04-17 13:21 Da Vinci @BlueMountain
文件夹存的是程序集阿 GAC中是共享程序集 Assembly中的本地程序集的一个拷贝 LZ说的是对的 即时编译结果是在内存中 JIT的事情
#41楼 2008-04-17 13:22 李战 路过,这里大都玩.NET的
楼主也不说和谁比,这样就有热闹看,高,实在是高!
#42楼 [楼主] 2008-04-17 13:58 没有昵称 @Da Vinci
帅哥太客气啦~~~java我不熟悉,这个不清楚呵。
偶现在还没来得及接触java。我搞.net之前是搞VC的,一直都没脱离windows平台。其实我的一些底层的知识也是在原来搞VC的时候学到的。^_^
原本打算准备学习一下java的源代码,不过因为要学的东西太多,还没开始呵。。
#43楼 [楼主] 2008-04-17 13:59 没有昵称 @李战
和非托管程序比。不管是c、c++、
vb、vc等等,他们生成的winapp的编译、加载过程都是一样的。
偶想说的重点是通过比较他们的加载过程和编译过程,了解.net为啥这么慢,而不是比较谁快谁慢的问题呵。^_^
#44楼 2008-04-17 14:19 路人小刀 [未注册用户] 实际上,IL中的方法并不是每次被调用时都会被重新编译一次
----------------------------------------------------------------
难怪程序第一次运行时的速度,是如此让人恼火!
#45楼 2008-04-17 14:21 路人小刀 [未注册用户] 托管程序此时却跳转到了另一个函数中。那么这个函数是哪里的呢?
1). 这个函数在一个叫做MSCorEE.dll的动态链接库文件中,当安装了.net框架时就会被复制在系统目录下。
2). 系统会根据托管程序PE文件中的信息找到这个DLL,
3). 然后通过MSCorEE.dll的PE文件信息找到这个_CorExeMain函数的入口地址,
4). 然后修改刚才的JMP指令要跳转的地址,从而将控制跳转到了_CorExeMain这个函数里面去。
5). 然后,在这个函数里面,CLR被启动了,并做了若干的初始化工作,
6). 然后再通过托管程序的CLR表头找到托管程序的入口地址,并将控制跳转到这里,
7). 于是托管程序开始运行
----------------------------------------------------------------
一共有七个步骤,挺有意思的
#46楼 2008-04-17 14:30 大林 [未注册用户] .net算好了,以前编译过一JAVA的项目,竟然编译了半小时才完成
#47楼 [楼主] 2008-04-17 14:32 没有昵称 @路人小刀
整理的很清晰哈。^_^
其实这里面的第六步,“将控制跳转到这里”之前,即时编译器需要把入口函数从IL代码编译成CPU指令,然后才能跳转过去。文章里面讲到这个的时候还没提到即时编译,当时就没指出呵。^_^
#48楼 2008-04-17 14:35 justleo [未注册用户] 其实程序慢的做要原因还是程序设计本身
#49楼 2008-04-17 14:45 A.Z! [未注册用户] --引用--------------------------------------------------
boyxia: 应该和java比比。
--------------------------------------------------------
支持
#50楼 2008-04-17 15:10 随风逝去(叶进) 知其所以然了,那该怎么变化,从而改进其执行速度呢?
#51楼 [楼主] 2008-04-17 15:22 没有昵称 @随风逝去(叶进)
我觉得,第一,可以让程序少启动,不过这个适用范围不大;另一个就是多用“延迟加载”。
#52楼 2008-04-17 15:35 Da Vinci @随风逝去(叶进)
改进程序执行速度的方法有很多, 算法, 一些设计模式等等. 针对程序本身原理而言也有很多, 引用类型和值类型的设计, 调用, 方法设计等等. 总之看你具体怎么用. 举一些例子就是在尽量构造函数中初始化字段而不是在类型中初始化; 避免装箱; 延迟加载也是; 用is而不是强制转型很多
#53楼 2008-04-17 16:40 birdshome 通用的