2010-10-27 13 views

Respuesta

6

Además cabeceras pre-compilar, hay una serie de otras cosas que te pueda estar ralentizando: software de detección de

  • Virus - puede tener un impacto desagradable en construcciones. Si tiene un comprobador de virus funcionando, intente apagarlo y vea qué tipo de mejora obtiene.
  • RAM baja: la memoria RAM no suficiente provocará muchas lecturas más de disco y le ralentizará. cont ->
  • Disco duro lento - Tiene que escribir en el disco independientemente y un disco lento, como los que están presentes en muchas computadoras portátiles y sistemas de gama baja, matará sus compilaciones. Puede obtener una unidad más rápida, una matriz RAID o SSD
  • Procesador (s) lento ... por supuesto.
  • Poco probable, pero: verifique si sus proyectos hacen referencia a recursos compartidos de red. Tener que arrastrar archivos a través de la red con cada compilación supondría una gran desaceleración.

EDITAR cuantos más pensamientos:

  • Si la solución contiene un gran número de proyectos que usted podría considerar la creación de otras soluciones "Sub" que contienen sólo los proyectos que está trabajando activamente en. Esta posibilidad depende de cuán interrelacionados estén sus proyectos.
  • Las compilaciones de proyectos pueden tener comandos de eventos de compilación pre y post asociados. Compruebe las propiedades de sus proyectos para ver si hay algún evento de compilación costoso especificado.
+2

Si no desea desactivar completamente la comprobación de virus, muchos escáneres le permiten especificar excepciones. Al agregar '* .c, * .cpp, * .h * .hpp, * .obj, * .lib, * .pch, * .ncb' a la lista de excepciones obtiene el 95% de la aceleración, y aún captura todos los elementos comunes. virus. – MSalters

+1

Las cuotas de red son un gran cuello de botella. Mi tiempo de compilación pasó de ~ 1 minuto (para un proyecto de demostración trivial de 1 página de código) a ~ 1 segundo cuando cambié de nuestro recurso compartido de red a mi SSD local. –

2

Los encabezados precompilados pueden ser útiles si incluye encabezados complejos (STL, Boost por ejemplo) directamente en una gran cantidad de archivos.

Asegúrate de que tu construcción no acceda a la red inadvertidamente o intencionalmente.

4

Puede crear un pre-compiled header de los archivos que normalmente no cambiará con frecuencia. Esto puede aumentar drásticamente tu tiempo de compilación.

+0

Nunca me di cuenta de esto cuando comencé a usar Visual Studio. Cambié de Code :: Blocks, que parece que lo hace automágicamente para ti. –

2
+0

uso g ++, así que no estoy seguro, pero hasta donde yo sé, vs2005 también admite esta opción, pero no está documentado. – bmeric

+2

Creo que VS2005 SOPORTA/MP pero no está documentado. – Puppy

+0

VS2005 ya realizará compilaciones concurrentes en máquinas MP, dentro de las limitaciones de las dependencias del proyecto. –

0

Si usted tiene una gran cantidad de proyectos en la solución de eliminar algunas de ellas. Si se hace referencia a ellos como proyectos, puede hacer referencia a los resultados binarios en su lugar (use el botón Examinar en el cuadro de diálogo Agregar referencia). Esto elimina una gran cantidad de comprobación de dependencia en la solución. No es ideal pero acelera las cosas.

3
  • Unity builds.
  • Precompiled headers.
  • Windows 7 se compila mucho más rápido que Windows XP (si es relevante para usted).
  • Desactive los escáneres antivirus.
  • Minimice las dependencias (es decir, #include de los archivos de encabezado).
  • Minimiza la cantidad de código de plantilla.
3

En el nivel de código, es útil minimizar la cantidad de encabezados incluidos por otros encabezados. Repetidamente cargar y leer archivos puede tener un gran impacto. En su lugar, adelante declare cosas siempre que sea posible. Por ejemplo:

#include <iosfwd> 
#include <string> 
#include "M.h" 
#include "R2.h" 
#include "A2.h" 

class M2; 
class A; 
class R; 
template<class C> class T; 

class X{ 
    M member; // definition of M is required 
    M2 *member2; // forward declaration is sufficient for pointers & references 
public: 
    // forward declaration of argument type A is sufficient 
    X(const A &arg); 

    // definition required for most std templates and specializations 
    X(const std::string &arg); 

    // forward declaration of your own templates is usually okay... 
    void f(T<int> t); 

    // unless you're defining a new one. The complete definition 
    // must be present in the header 
    template<class Z> 
    void whatever(){ 
    // blah blah 
    } 

    R f(); // forward declaration of return type R is sufficient 

    // definitions of instantiated types R2 and A2 are required 
    R2 g(A2 arg){ 
    return arg.h(); 
    } 

    // ostream is forward-declared in iosfwd 
    friend std::ostream &operator << (std::ostream &o, const X &x); 
}; 

Los usuarios de esta clase tendrán que #include lo archivos proporcionan las definiciones de clases si realmente llamar a cualquiera de X(const A&), f(t<int>), f() o operator <<.

Las plantillas casi seguramente se sumarán a la sobrecarga de inclusión. Por lo general, esto vale su poder, en mi opinión. Cuando crea sus propias plantillas, la definición completa debe residir en el archivo de encabezado; no puede ir en un archivo cpp para compilación separada. Las plantillas estándar no pueden ser declaradas hacia adelante, porque las implementaciones pueden proporcionar parámetros de plantilla adicionales (con argumentos predeterminados) y las declaraciones avanzadas de plantillas deben listar todos los parámetros de la plantilla. El encabezado iosfwd forward-declara todas las plantillas y clases de flujo estándar, entre otras cosas. Sus propias plantillas pueden ser declaradas hacia adelante siempre y cuando no instale ninguna especialización.

Los encabezados precompilados también pueden ayudar, pero la mayoría de los compiladores limitan la cantidad que puede incluir en un archivo fuente (Visual Studio lo limita a uno), por lo que no son una panacea.

0

La solución que hemos utilizado fue IncrediBuild. Solo tira más hardware al problema. Además de todas las máquinas de desarrollo (bastante potentes ellas mismas), teníamos varios servidores de 4 núcleos haciendo nada más que compilar.

0

Cambie su Plataforma de soluciones en la opción "Cualquier CPU" que se proporciona en la parte superior de la visual stdio, entonces la velocidad de compilación de su programa se incrementará definitivamente.

Cuestiones relacionadas