我使用LINQPad(完整版)来学习C#并且我非常喜欢它但是我发现代码运行的性能特点是LINQPad反直觉和令人烦恼,完全不同于运行的相同代码视觉工作室。例如,使用无符号数学的代码比使用Visual Studio中的int
的相同代码(也应该是)稍快一些,但在LINQPad中,它的速度要慢得多。
示例:
static int n_mod_30_v0 (int n)
{
return unchecked(n % 30);
}
static int n_mod_30_v1 (int n)
{
return unchecked((int)((uint)n % 30));
}
在Studio中的一百万个随机非负整数上调用它会显示签名版本的速度慢几个百分点(因为它需要几个额外的CPU指令来调整负结果),但差异远低于测量抖动。 LINQPad的无符号版本持续较慢(!)25%至50%。这没有意义。是的," / o +"用于释放模式的按钮和"用/ optimize +"编译在首选项中选择。
几乎就像LINQPad正在使用不同的(JIT)编译器 - 这很可能,因为我安装了大量的运行时版本,包括旧的Mono。但是,我找不到目标框架的任何配置选项,我不知道那里发生了什么。
LINQPad可以配置为针对特定的框架和/或CPU吗?或者还有其他潜在因素可能导致LINQPad下的差/异常代码性能?
在调整SPOJ等编码质询网站(通常运行较旧版本的Mono)的提交时,定位Mono非常有用,但整个LINQPad对于其中一个MS框架(如4.5.x)会更有用。
此计算机上报告的 System.Environment.Version
值:
2.0.50727.8009 for Visual Studio with v2 .. v3.5
4.0.30319.17020 for Mono
4.0.30319.42000 for Visual Studio with v4 .. v4.6.1 and for LINQPad