关于.NET的2个基本但有趣的问题

时间:2010-06-09 10:50:37

标签: c# .net windows

当我第一次看到C#时,我认为这一定是个笑话。我开始用C语言编程。但是在C#中你可以拖放对象,然后只为它们编写事件代码。这很简单。

现在,我仍然最喜欢C,因为我对基本的低级操作非常感兴趣,C只是下一级汇编程序,几乎没有基本的例程,所以我非常喜欢它。甚至更多是因为我为微控制器编写了很少的应用程序。

但昨天我在asm中为基于微控制器的LED立方体编写了非常简单的控制程序,我需要一些方法来简单地为Cube创建动画序列。所以,我记得C#。我几乎没有C#技能,但我仍然创建了简单的程序,用GUI在大约一小时内完成动画序列,只需谷歌的帮助和C#中嵌入的功能描述的帮助。

所以,为了达到这一点,除了C#之外还有其他一些原因可以使用其他语言吗?我的意思是,它是如此有效。我知道Java有点类似,但我希望C#更直接来自Microsoft,因为它更有效。

第二个问题是,编译成CIL,而不是运行CLR比直接将其编译成机器代码有什么好处?我知道可移植性是一个,但由于C#主要用于Windows,直接编译它不会更强大吗?感谢。

8 个答案:

答案 0 :(得分:10)

1 - 差异语言各有利弊。有一系列语言(功能,动态,静态等)对特定问题域更好。您需要在每个家庭中学习一个,以了解何时选择哪一个。例如写一个简单的脚本,我会选择Ruby over C#

2 - 将其编译为CIL:可移植性可能不是什么大问题......但准确地说,Mono在Linux上实现了CLR。所以那里。此外,CIL可帮助您在CLR上运行的语言之间进行混合和匹配。例如IronRuby可以访问用C#编写的标准框架库。它还使CLR能够利用运行程序的实际硬件(例如,打开优化,使用特定指令)。两台机器上的CLR将为相应的机器生成来自相同IL的最佳本机代码。

答案 1 :(得分:5)

语言和平台选择是项目目标的一个功能。听起来你喜欢系统级编程,这是使用C / C ++的优点之一。因此,如果您喜欢这样的话,请继续编写系统级代码。

在快速业务应用程序开发中,使用C#编写代码非常有用,因为目标本质上是不同的。更快地编写好的工作代码在工时和上市时间都是值得的。微软为我们提供了一种富有表现力的语言和强大的功能框架,这使我们无法为95%的业务需求编写低级代码或工具。

答案 2 :(得分:5)

IL的一个重要优势是语言独立性。您可以在项目中定义应该在C ++中完成的模块,一些在C#中完成,一些在VB.net中。编译时所有这些项目都给出了相应的程序集(.dll / .exe)。这可以在c#one中使用C ++项目的程序集,反之亦然。这是可能的,因为..无论您选择哪种语言(.net支持)..都编译为相同的IL代码。

答案 3 :(得分:2)

我不确定C#是否更有效,因为它是Microsoft产品。如果您使用Visual Studio或其他RAD,则会自动生成某些代码,有时效率会降低。几年前,我是一个教条主义者,认为只有C可以回应我们所有的祈祷:-P,但现在我认为虚拟机可以在执行它之前优化代码(如RDBMS)方面有很多帮助,存储在caché件中稍后执行的代码等。包括像Terracotta那样创建虚拟机“集群”的可能性。至少具有额外抽象层的好处更大,没有它。

答案 4 :(得分:1)

我同意斯波尔森。 C#非常擅长解决业务问题。您可以非常有效地创建一个框架来模拟业务流程,并通过面向对象和设计模式解决许多问题。在这方面,它提供了C ++具有的很好的面向对象功能。

如果你关注速度,那么C就是你说的原因。

答案 5 :(得分:1)

关于第二个问题:您可以运行NGEN来生成程序集的本机映像,这可以提高性能。不是机器代码,但由于它绕过JIT(即时编译)阶段,应用程序将更快地运行。

http://msdn.microsoft.com/en-us/library/6t9t5wcf(VS.80).aspx

  

原生图像生成器(Ngen.exe)   是一个改善的工具   托管应用程序的性能。   Ngen.exe创建本机映像   是包含已编译的文件   特定于处理器的机器代码,以及   将它们安装到本机映像中   缓存在本地计算机上。该   运行时可以使用来自的本机映像   缓存而不是使用   即时(JIT)编译器进行编译   原装配。

答案 6 :(得分:1)

  

“还有其他原因吗?   速度,使用任何其他语言比   C#?“

我能想到至少四个,都有点相关:

  • 我目前在“语言X”方面投入了大量资金,而我没有时间或金钱可以转用其他东西。 (移植现有的代码库,购买/获取/端口库,重新开发C#的团队技能,学习不同的工具。)
  • 预计需要将代码移植到不支持C#的平台。
  • 我需要使用C#中没有的工具,或者不支持。 (IDE,备用编译器,代码生成器,库,列表不断......)
  • 我找到了一种更有效率的语言。 ; - )
  

“编译的优点是什么?   进入CIL,而不是由CLR运行   直接将其编译成机器   码?“

所有这些都是为了让运行时环境能够更好地控制代码的执行方式。如果你编译成机器代码,那么很多时候就会变成“一成不变”。将编译推迟到机器代码,直到您了解有关运行时环境的更多信息,这样您就可以以其他方式进行优化。只有几个我的头顶:

  • 延迟编译可让您选择与主机CPU更匹配的指令。 (要在拥有64位本机指令或最新的SSE扩展时使用它们。)
  • 延迟代码可让您以其他方式进行优化。 (如果在运行时只有一个类派生自特定接口,则可以开始内联甚至虚拟方法等。)
  • 垃圾收集器有时需要将检查点插入用户代码中。延迟编译使GC可以更好地控制和灵活完成。

答案 7 :(得分:0)

第一个答案:默认情况下,C#应该用于新项目。在某些情况下,它还没有赶上C ++(就多方式支持而言),但它正朝着这个方向发展。

第二个答案:“可移植性”还包括x86 / x64可移植性,可以通过将平台设置为AnyCPU来实现。另一个(在这一点上更理论化)的优点是JIT编译器可以利用特定于CPU的指令集,从而更有效地进行优化。