Sign in to follow this  
Endemoniada

VS2012 Just Got Slow

Recommended Posts

Hi guys,

 

I have a simple line of code that I call to set the values of a vertex:

 

setv(v++, 1.0f, 0.0f, 1.0f, 0.0f, 1.0f, 0.0f, color);

 

It's not inline and there are no macros. When I add about 150 of those and build the 'generating code' part takes a long time, like 5 seconds; without the lines it's pretty much instant. I don't understand. Thanks.

 

I'm using VS2012 on 32-bit Win8 Pro.

 

Share this post


Link to post
Share on other sites
Or is it possible that calling setv switches on link time code generation for the whole program? In addition to Bacterius' questions, I'd like to add "Is setv from a statically linked library? How was that library compiled?"

Share this post


Link to post
Share on other sites

I'm pretty sure you just ran into the "Link-time Code Generation" feature of VS2012. As the name suggests, code generation is done during linking the whole program, not while compiling each source file.

 

This is done to be able to optimize across object file boundaries, which MS calls "Whole Program Optimization". Unfortunately, this considerably slows down builds.

 

Since it is an optimization technique, it should be turned off for debug builds. So to verify that this is in fact the problem, check if the debug build has the same problem. If not, it is probably the Link-time Code Generation.

 

To turn it off, right-click your project in Solution Explorer, and select "Properties". Then, go to "Configuration Properties", "Linker", "Optimization". Change the "Link Time Code Generation" property to "Default". Make sure that you do this for all the libraries in your solution!

 

That should speed up your build again, hopefully...

Share this post


Link to post
Share on other sites
My experience with MSVC (and I admit I haven't done serious work in MSVC 2012 yet) is, that even if you switch off link time code generation but then link a static library which has link time code generation enabled, your whole program will be linked with link time code generation. To my knowledge there is no way around that without recompiling the library in question without LTCG.

Share this post


Link to post
Share on other sites

Hi guys, the setv() function is simply prototyped in a .h file and defined in a .cpp file that are part of my project. Here it is:

 

 

// in numerical.h
void setv(vertex* dst,float x,float y,float z,float nx,float ny,float nz,DWORD clr);

// in numerical.cpp
void setv(vertex* dst,float x,float y,float z,float nx,float ny,float nz,DWORD clr)
{
 dst->x=x;
 dst->y=y;
 dst->z=z;

 dst->nx=nx;
 dst->ny=ny;
 dst->nz=nz;

 dst->u=0.0f;
 dst->v=0.0f;

 dst->clr=clr;
}

 

I just tested it and you guys are right, it does not happen in debug. That's a relief because I thought something was messed up that I wouldn't be able to find. Thanks everyone.

Edited by Endemoniada

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

Sign in to follow this