【问题标题】:Is it possible to write code that will cause long compile times?是否可以编写会导致编译时间长的代码?
【发布时间】:2009-10-19 02:30:49
【问题描述】:

我正在开发我们的持续集成系统,并且我对模拟我们的系统处理意外的长编译时间很感兴趣。有什么方法可以导致编译需要很长时间才能完成?或者也许强迫它进入某种需要大量时间编译的循环?我正在寻找仅在编译而不是执行时像 Thread.Sleep() 这样简单的东西。

使用预处理指令怎么样?

有什么想法吗?

【问题讨论】:

  • 将 C++ 和模板元编程与疯狂的递归模板一起使用?
  • 把评论变成答案,因为这样我就可以正确投票了。
  • 在模板代码中试试ackermann函数。 o(n!) 中的阶乘也可能做得很好。

标签: c# .net visual-studio visual-studio-2008 compiler-construction


【解决方案1】:

这是一个MSBuild sleep task,应该可以解决问题。从您的 .csproj 文件中的 BeforeBuild 目标调用它,或根据您的需要 wherever is appropriate

MSBuild Community Tasks 也有一个睡眠任务,所以如果你需要使用他们的一些其他任务,我发现这非常有用。

【讨论】:

    【解决方案2】:

    显然,睡眠任务是要走的路。但是,如果您对使 C# 编译器花费任意时间的方法感兴趣,仅供参考,可以在源代码中对问题进行编码,这些问题会强制重载解析算法执行 O(n^m) 算法。选择足够大的 n 和 m,你可以让编译器做你喜欢的工作。

    如果您有兴趣,这是我关于该主题的文章。

    http://blogs.msdn.com/ericlippert/archive/2007/03/28/lambda-expressions-vs-anonymous-methods-part-five.aspx

    【讨论】:

    • 太棒了!感谢您提供的重要信息。
    【解决方案3】:

    我曾经有一位同事写了一个 16,000 行的 switch 语句。编译需要很长时间,然后当他进一步扩展它时,它实际上破坏了编译器。不过,不知何故,我不确定这就是你的想法。

    【讨论】:

      猜你喜欢
      • 2021-02-17
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      • 2012-03-14
      • 1970-01-01
      • 2012-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多