我已经写了近二十年的C/C++代码了,我也知道Perl,Python,PHP和一些Java,我正在自学JavaScript.但我从未做过任何.NET,VB或C#的东西.托管代码究竟是什么意思?
维基百科简单地将其描述为
在虚拟机管理下执行的代码
它特别说Java(通常)是托管代码,所以
与此相类似,
好吧,所以这不仅仅是一个问题,但对于那些曾经在我所在行业的人来说,我现在感觉N00B-ish ...
在这里好奇:是否可以在Windows XP/Vista下使用.net托管代码调用Windows蓝屏死机?如果有可能,示例代码是什么?
仅仅为了记录,这不是出于任何恶意目的,我只是想知道实际杀死指定的操作系统需要什么样的代码.
根据我的经验,.NET比本机代码慢2到3倍.(我实施了L-BFGS进行多变量优化).
我已经在stackoverflow上跟踪广告到 http://www.centerspace.net/products/
速度真的很惊人,速度接近原生代码.他们怎么能这样做?他们说:
问:NMath是"纯粹的".NET吗?
答:答案在某种程度上取决于您对"纯.NET"的定义.NMath是用C#编写的,加上一个小的Managed C++层.但是,为了更好地执行基本线性代数运算,NMath确实依赖于本机Intel Math Kernel Library(包含在NMath中).但是没有COM组件,没有DLL - 只是.NET程序集.此外,在托管C++层中分配并由本机代码使用的所有内存都从托管堆中分配.
有人可以向我解释一下吗?
我使用Visual C++和Win32 API学习了Windows编程.如今,似乎大多数应用程序都是使用C#在.NET中开发的.据我所知,大多数情况下,本机代码和托管代码之间没有太大的性能差异.所以我想知道,如果我今天开始编写一个新的桌面应用程序,是否有任何理由(除了我对C++更熟悉的事实),我可能想用非托管C++编写它.NET?使用C++和本机代码还有一些优势吗?或者在Windows平台上用.NET或多或少取代了这种方法?
当然我知道编写低级设备驱动程序和类似程序的人不会在.NET中这样做.我要求参考典型的面向客户端的应用程序,这些应用程序不会直接进行硬件调用.
我用单一方法编写.Net 3.5 dll,由Delphi .exe调用.不幸的是它不起作用.
步骤:1.使用以下代码创建C#3.5 dll:
public class MyDllClass
{
public static int MyDllMethod(int i)
{
MessageBox.Show("The number is " + i.ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
这会引发Delphi异常,表明它无法连接dll.从非托管代码启用C#managed dll所需的步骤是什么?
有没有人熟悉这个主题的好例子?
谢谢
WPF应用程序的核心是托管应用程序? 对? 因此,我必须在使用托管C++或托管C#之间进行选择.几年前我用托管C++进行过实验.它似乎还没有为黄金时段做好准备.我猜测微软在托管C#方面付出了更多努力,而不是托管C++.因此,似乎使用托管C#是两者之间的最佳选择.是这样的吗?您使用任何一种语言都可以获得WPF的经验吗?提前致谢.
为什么不能在编译器编写的管理需要进行什么管理中的C++代码(即,使其"CLR兼容")?
也许有一些妥协,比如在某些情况下禁止无效指针等等.但所有这些额外的关键词等等.这些新增内容必须解决的问题是什么?
我对某些方面以及可能难以解决的问题有所了解,但我们将非常感谢一个很好的解释!
请注意,这不是微软为了传播托管代码的概念而进入大气层的.NET CLR.大多数人都知道托管代码已存在很长时间,并且与火箭科学无关.
我想知道的是为什么计算机发展中运行时安全的概念来得太晚了.
我知道这就像问"为什么第一辆T型福特不带安全气囊和安全带?".尽管如此,这个问题的相关性仍然存在,因为保护已知的危险在人性中是很好的.例如,第一辆T-Ford的速度不够快,无法激发安全气囊的研究.它的速度不够快,人们常常做出致命的判断错误,以至于它会激励安全带成为许多国家的法律和标准.
在计算机进化中,它几乎是另一种方式.我们开始使用汇编程序,相当于以200英里每小时的速度驾驶T-Ford.我有幸与这个时代的几个老卡车司机交谈,听到这些关于手工组装汇编代码,人工调试器,格栅代码等的故事.如果我们在C中犯了一个非常讨厌的错误,我们可能会结束蓝屏.几十年前,你最终可能会损坏硬件而上帝知道什么.但这对我来说是一个谜 - 几十年来,我们所做的一切都是为了减少痛苦,因为蓝屏(很抱歉使用MS作为任何东西的原型).
保护免受已知危险的不仅仅是在人性中,在任何程序员的本性中,自动化和系统化常见设施也是如此,例如错误检查,内存诊断,日志框架,备份维护等.
为什么程序员/人类没有开始自动完成确保他们提供给系统的代码不会损害系统的任务?是的,当然,表现.但是,嘿,这是在任何严重渗透的硬件标准之前.为什么主板没有设计总线架构和额外的处理器来促进"托管代码"?
模特T福特是否有任何比喻不足以让我失踪?
Q1)为什么C#最初编译为IL然后在运行时JIT编译并在虚拟机(?)之上运行.或者JIT是否符合本机机器代码?
Q2)如果第二个为真(JIT符合本机机器代码),那么代码运行的.NET沙箱在哪里?
Q3)此外,为什么代码首先编译为IL.为什么不一直编译到本机代码?MS中有一个名为ngen的工具,但为什么可选?
我的整个应用程序(相当大,具有20MB可执行文件)是用非托管C++编写的.因为我可以清楚地看到使用托管代码的优势,我想开始在我的应用程序中引入托管代码,但是我从哪里开始呢?
我可以轻松地开始使用C++/CLI并将其与我的应用程序的其余部分链接吗?(尽管C++/CLI语法似乎相当"异国情调").
或者转到C#更好,但是将这与我的非托管C++代码"链接"在一起的最佳方法是什么?
使用/ clr选项编译所有C++代码是否有意义?这会有用吗?
我不得不担心编组吗?这是否会产生开销,或者我可以在托管和非托管之间切换而不会造成性能损失(正如我20年前混合fortran和C时所做的那样).性能在我的应用程序中非常重要,因为它是一个科学的应用程序,有时会处理几千兆字节的内存.
或者只重新设计用户界面,并且只在C#中编写它,并将我的应用程序的其余部分(计算逻辑,业务逻辑,数据库接口......)保存在非托管C++中?
由于我的应用程序有时需要处理几千兆字节的内存,因此我有一个64位的版本.拥有64位托管代码是否容易?如果使用那么多内存,Woudl垃圾收集器仍然有效吗?
简单说明:我从哪里开始?
帕特里克
managed-code ×10
.net ×6
c# ×6
managed-c++ ×3
c++ ×2
c++-cli ×2
clr ×2
unmanaged ×2
bsod ×1
delphi ×1
history ×1
jit ×1
mixed-mode ×1
nmath ×1
vb.net ×1
windows-xp ×1
wpf ×1