Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 性能:在VS中编译,在Windows和Linux上在Mono中运行_C#_.net_Linux_Performance_Mono - Fatal编程技术网

C# 性能:在VS中编译,在Windows和Linux上在Mono中运行

C# 性能:在VS中编译,在Windows和Linux上在Mono中运行,c#,.net,linux,performance,mono,C#,.net,Linux,Performance,Mono,我有以下问题: 是否可以使用VS.NET编译一个C#项目,并在mono上运行 方法1(相对于使用mono编译器编译)是否有任何性能优势 在linux上运行output.exe/.dll怎么样?相关的性能特征是什么 谢谢 是的,你能做到。除非代码使用一些未在mono上实现的框架元素,否则它应该可以工作 我不知道 不确定3和1之间的区别是什么。如果您指的是在Windows上使用mono进行编译,然后将其移植到linux,那么它应该仍然可以正常工作。两个编译器生成的IL代码基本相同 我不知道性能如何,

我有以下问题:

  • 是否可以使用VS.NET编译一个C#项目,并在mono上运行
  • 方法1(相对于使用mono编译器编译)是否有任何性能优势
  • 在linux上运行output.exe/.dll怎么样?相关的性能特征是什么
  • 谢谢

  • 是的,你能做到。除非代码使用一些未在mono上实现的框架元素,否则它应该可以工作

  • 我不知道

  • 不确定3和1之间的区别是什么。如果您指的是在Windows上使用mono进行编译,然后将其移植到linux,那么它应该仍然可以正常工作。两个编译器生成的IL代码基本相同


  • 我不知道性能如何,但尝试展示如何在vs下编译MonoDevelop工具。这应该会让您了解其中的区别。

    1:
    对编译器编译成IL代码,在两个系统中运行

    并不是每个库都是用Mono实现的,但是这些库应该可以无缝地工作。此外,必须编写独立于系统的代码才能正常工作,例如:

    • 使用
      Path.directorysepartorchar
      Path.combined
      形成文件路径,而不是使用字符串literal
      “\”
      “/”
    • 使用BitConverter类执行独立于big-endian/little-endian结构的字节操作
    2:
    编译器生成的代码可能存在一些差异,但几乎所有的优化都是由JIT编译器完成的,因此很少会产生任何可测量的差异

    3:

    exe和dll文件不包含本机代码,它们包含IL代码。本机代码由JIT编译器在加载exe/dll时生成。

    要展开其他答案:

    关于第3点。是的,使用MSCLR和Mono时会有性能差异,不,我不知道会是什么。可能什么都没有,可能很少,或者可能一个要快得多-您必须分析您的特定应用程序

    还要注意的是,尽管JIT编译器生成的代码速度很快,但库的实现方式将非常不同,并且几乎肯定会有不同的性能特征


    如果您计划在Mono下支持您的应用程序,您将需要在那里运行性能测试以及MS CLR。

    我认为EXE/DLL包含CLR加载程序/绑定程序。使用Mono,您可以使用AOT(提前)编译。这将将.NET程序集(IL代码)编译成C++或C所生成的本地代码,从而提供更快的启动时间、更好的内存性能和潜在更好的整体性能。但是,它只能在编译它的操作环境(OS+x86/x64)上工作@C罗杰斯-有点像恩根(只是可能是GAC)-P