Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.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# 将int替换为double时的Visual studio长编译_C#_.net_Visual Studio_Debugging_Visual Studio 2013 - Fatal编程技术网

C# 将int替换为double时的Visual studio长编译

C# 将int替换为double时的Visual studio长编译,c#,.net,visual-studio,debugging,visual-studio-2013,C#,.net,Visual Studio,Debugging,Visual Studio 2013,我的VS2013 Ultimate副本编译此代码的时间超过60秒: class Program { static void Main(string[] args) { double dichotomy = Dichotomy( d => { try { int size = (int) d;

我的VS2013 Ultimate副本编译此代码的时间超过60秒:

class Program
{
    static void Main(string[] args)
    {
        double dichotomy = Dichotomy(
            d =>
            {
                try
                {
                    int size = (int) d;
                    byte[] b = new byte[size];
                    return -b.Length;
                }
                catch (Exception)
                {
                    return 0;
                }
            },
            0,
            int.MaxValue,
            1);

        Console.WriteLine(dichotomy);
        Console.ReadKey();
    }

    private static double Dichotomy(
        Func<double, double> func,
        double a,
        double b,
        double epsilon)
    {
        double delta = epsilon / 10;
        while (b - a >= epsilon)
        {
            double middle = (a + b) / 2;
            double lambda = middle - delta, mu = middle + delta;
            if (func(lambda) < func(mu))
                b = mu;
            else
                a = lambda;
        }
        return (a + b) / 2;
    }
}
类程序
{
静态void Main(字符串[]参数)
{
二分法=二分法(
d=>
{
尝试
{
int size=(int)d;
字节[]b=新字节[大小];
返回-b.长度;
}
捕获(例外)
{
返回0;
}
},
0,
int.MaxValue,
1);
控制台写入线(二分法);
Console.ReadKey();
}
私有静态二分法(
Func Func,
双a,
双b,
双ε)
{
双δ=ε/10;
而(b-a>=epsilon)
{
双中=(a+b)/2;
双λ=中间-三角洲,μ=中间+三角洲;
if(func(lambda)

但是如果我用
int
替换
double
,它会立即编译。怎么解释…?

我在我的机器上复制了27秒。作恶者是MsMpEng.exe,它会燃烧100%的内核这么长时间。在任务管理器的“流程”选项卡中很容易看到

这是Windows Defender服务,实际执行恶意软件扫描的服务。通过取消勾选“开启实时保护”选项将其禁用,可立即修复延迟。将存储项目的路径添加到“排除的文件位置”框也是如此,这可能是您首选的方法


我不想猜测根本原因,但必须假设您的源代码触发了恶意软件规则。这不是一个很好的解释,我没有看到当我将.NET版本<4.0作为目标时的延迟。好吧,我放弃:)

我不能权威地说,因为我已经20多年没有在汇编代码级别上做过手脚了,但我很容易相信这一点

IEEE标准浮点运算与处理器实现的浮点运算之间的差异通常迫使库例程中的链接进行转换,而整数数学只能使用CPU指令。在IEEE定义该标准时,他们做出了一些在实现中非常罕见的选择,特别是很久以前在微码中实现的成本要高得多。当然,当前的PC系统是围绕80387和80486(这两个标准早于该标准)的后代芯片构建的

如果我是对的,那么增加的时间是因为它涉及到向链接添加一块库代码,而链接是构建时间的一大部分,随着可重定位块的添加,它往往会成倍增长


Linux上的叮当声可能会也可能不会有同样的减速;如果它真的避免了它,并且进一步扩展了我的猜测,那将是无处不在的共享内存libc和链接器优化的产物。

在我的机器上立即编译这两种数据类型。。。你在哪台机器上编译它?请记下我的第一条评论;我看到了同样的行为~使用
double
时为15秒,使用
int
时为即时。3.4Ghz的机器。很有趣。我检查了我的版本,实际上我正在运行VS2013 Premium——我想我已经安装了Ultimate。也许这只是最终版本。@chris为了支持这一假设,VS Express 2013/Windows Desktop对其进行了很好的编译。据我所知,“VS2013非常奇怪的行为”并不是一个奇怪的现象。:)天哪,微软,你在跟我开玩笑。。。Tnx的帮助,这是真正的
MSSE
.NET4.0+
谁是罪魁祸首好抓!我想知道到底是什么导致了这个问题(特别是对于一个非常简单并且几乎不包含外部依赖项的程序)。编译的结果MSIL字节是否可能看起来与已知恶意软件的模式完全相同,从而引发MsMpEnd?