我的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相关问答推荐

如何通过在后台预加载流项来优化流迭代的性能?

为什么脚本不从 _Layout 加载并且必须添加到部分视图中?

.NET 4.5 项目未在 Visual Studio 2022 中编译

Dictionary.FirstOrDefault() 如何判断是否找到了结果

是否可以将 SandCastle 创建的两个页面合并到一个主页中?

使用 Thread.Abort() 有什么问题

将 int 转换为 .NET 中的位数组

是否可以像 WebView 一样在 Windows 窗体中嵌入 Gecko 或 Webkit?

指定的版本字符串不符合要求的格式 - major[.minor[.build[.revision]]]

使用返回随机结果的函数进行单元测试

返回 IQueryable 或不返回 IQueryable

哪个单元测试框架?

将 C# 编译为本机?

清除 .NET 的 StringBuilder 内容的最佳方法

如何在我的 C# 程序的面板中运行另一个应用程序?

自定义属性的构造函数何时运行?

如何知道 DateTime 是否在 C# 中的 DateRange 之间

如何访问 Session 变量并在 javascript 中设置它们?

DataContractSerializer vs XmlSerializer:每个序列化器的优缺点

如何将 MailMessage 对象作为 *.eml 或 *.msg 文件保存到磁盘