我的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;
    }
}

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

推荐答案

我在我的机器上复制了27秒.做坏事的是MsMpEng.exe,它100%地烧毁内核那么长时间.在任务管理器的进程选项卡中很容易看到.

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

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

.net相关问答推荐

使用EFCore.BulkExtensions库方法BulkInertOrUpdate时区分插入和更新的记录

使用 Task.WhenAll 但需要跟踪每个单独的 Task 的成功

如何调试 .NET 运行时中的内部错误?

从 byte[] 创建 zip 文件

Style 和 ControlTemplate 的区别

如何将字符串列表数据绑定到 WPF/WP7 中的 ListBox?

为什么要判断这个!= null?

File.ReadAllLines() 和 File.ReadAllText() 有什么区别?

如何通过 LINQ 比较没有时间的 DateTime?

使用 C# 在 .NET 4.0 中 Task.Run 的替代方法是什么?

InternalsVisibleTo 属性不起作用

覆盖方法上的 C# 可选参数

String.Split 仅在 C# 中的第一个分隔符上?

我应该在 LINQ 查询中使用两个where子句还是&&?

当我们按下 Enter 键时启动的 WPF 文本框命令

ILookup 接口与 IDictionary

设置 System.Drawing.Color 值

带有嵌套控件的设计模式

是 C# 中的 bool 读/写原子

LINQ 可以与 IEnumerable 一起使用吗?