才学C#,搞不明白托管代码到底是什么,还有什么托管堆啥的
根据我的理解,托管代码是不是运行在C#给它提供的一个虚拟环境中?
那如果我调用了dll中一某个API,使用了不安全代码,这些又算那种情况呢?
C++不是托管的,那在堆上的数据,代码是不是没人管了,必须手动释放(没学过C++)
这些问题很是疑惑,搞不明白
望高手指点
根据我的理解,托管代码是不是运行在C#给它提供的一个虚拟环境中?
那如果我调用了dll中一某个API,使用了不安全代码,这些又算那种情况呢?
C++不是托管的,那在堆上的数据,代码是不是没人管了,必须手动释放(没学过C++)
这些问题很是疑惑,搞不明白
望高手指点
非托管:由操作系统直接管理。
同等条件下,运行效率不如C++。还有一个效率不高的原因是.net编译后是字节码,并不是可以在cpu上运行的机器码。
程序运行的时候.net runtime(虚拟机)会先把字节码编译成机器码,再运行。幸运的是.net runtime使用JIT编译技术,也就是运行一遍后机器码会cache,再次运行不需要再重新编译了,因此.net更适合web上使用,桌面程序第一次启动有点慢。
但是你别忘了这个虚拟机在设计的时候已经考虑了如何优化代码,优化性能,优化内存管理和释放以及线程管理还有配合C#编译器,JIT编译器能将代码优化到最佳,比如GC,线程池,泛型等等...
非托管代码指的是本地代码(native code),直接编译成汇编语言的。。
那么调用dll里的函数就不用虚拟机管理了吧?
如果我把需要快速运算的部分用C写,然后调用,这样整个程序应该会快些吧?