Я хочу уменьшить свое время компиляции проекта VS.NET - каковы Ваши идеи для того, как сделать это?

Поместите себя в положение компилятора: то, когда Вы вперед объявляете тип, весь компилятор знает, - то, что этот тип существует; это ничего не знает о своем размере, участниках или методах. Поэтому это звонило неполный тип . Поэтому Вы не можете использовать тип для объявления участника или базового класса, так как компилятор должен был бы знать расположение типа.

Принятие следующего предописания.

class X;

Вот то, что Вы можете и не можете сделать.

, Что можно сделать с неполным типом:

  • Объявляют, что участник указатель или ссылка на неполный тип:

    class Foo {
        X *p;
        X &r;
    };
    
  • Объявляют функции или методы, которые принимают/возвращают неполные типы:

    void f1(X);
    X    f2();
    
  • Определяют функции или методы, которые принимают/возвращают указатели/ссылки на неполный тип (но не используя его участников):

    void f3(X*, X&) {}
    X&   f4()       {}
    X*   f5()       {}
    

, Что Вы не можете сделать с неполным типом:

  • Использование это как Использование базового класса

    class Foo : X {} // compiler error!
    
  • это для объявления участника:

    class Foo {
        X m; // compiler error!
    };
    
  • Определяют функции или методы с помощью этого Использования типа

    void f1(X x) {} // compiler error!
    X    f2()    {} // compiler error!
    
  • его методы или поля, на самом деле пытаясь разыменовать переменную с неполным типом

    class Foo {
        X *m;            
        void method()            
        {
            m->someMethod();      // compiler error!
            int i = m->someField; // compiler error!
        }
    };
    

Когда дело доходит до шаблонов, нет никакого абсолютного правила: можно ли использовать неполный тип, поскольку шаблонный параметр зависит от пути, тип используется в шаблоне.

, Например, std::vector требует, чтобы его параметр был полным типом, в то время как boost::container::vector не делает. Иногда, полный тип требуется, только если Вы используете определенные функции членства; дело обстоит так для [1 110] , например.

А хорошо зарегистрированный шаблон должен указать в его документации на все требования своих параметров, включая то, должны ли они быть полными типами или нет.

6
задан 25 August 2009 в 04:38
поделиться

4 ответа

Я удивлен, что для компиляции 60 тыс. Строк кода требуется 2 минуты. У меня есть приложение, состоящее из 500 000 строк кода, и оно занимает всего полторы минуты. Убедитесь, что вы не выполняете полную перестройку каждый раз, и убедитесь, что вы не очищаете раствор между сборками. Нормальная сборка должна выполнять инкрементную сборку,

4
ответ дан 8 December 2019 в 17:24
поделиться

Вещи, которые увеличивают время компиляции:

  • Количество проектов в решении имеет большее значение, чем количество файлов в конкретном проекте.
  • Пользовательские задачи сборки могут иметь огромное значение, особенно если они генерируют код или выполняют анализ после сборки (FxCop, StyleCop, Code Contracts).
10
ответ дан 8 December 2019 в 17:24
поделиться

Разделение вашего проекта на несколько проектов поможет. Только те проекты, в которых есть изменения (и проекты, которые от них зависят), потребуют перекомпиляции.

Однако единое пространство имен не должно влиять на время компиляции. Однако, если вы разделите свой проект на несколько проектов / сборок, то одно пространство имен определенно не лучшая идея.

Обновление до более быстрого процессора, вероятно, поможет, но вы можете обнаружить, что более быстрый ввод-вывод (лучше диски , RAID и т. Д. Будут более полезными).

И да, избегание длительного времени компиляции - одна из вещей, о которых разработчики должны позаботиться. Когда дело доходит до продуктивности, делайте все, что в ваших силах (лучшие инструменты, большие экраны, более быстрые машины и т. Д.)

-1
ответ дан 8 December 2019 в 17:24
поделиться

Это поток об аппаратном обеспечении для сокращения времени компиляции. Также это действительно отличное сообщение в блоге Скотта Гатри, посвященное оценке производительности жесткого диска.

1
ответ дан 8 December 2019 в 17:24
поделиться