webForumDet fria alternativet

Debug vs Release

6 svar · 441 visningar · startad av Alpha II

Alpha IIMedlem sedan maj 20002 579 inlägg
#1

Vad är skillnaden mellan debug och release när man kompilerar?

Jag får enorma prestandaskillnader mellan debug och release. I debug får jag kanske 8-10 fps medans jag i release fpr 250 fps. Det är helt omöjligt att testa programmet i Debug mode med den prestandan. Med tanke på den enorma skillnaden så antar jag att nåt kompileras lite konstigt i debug mode.

Den del av koden som utgör hela skillnaden är denna:

void CModel::Render()
{
//	glColor3ub(120,120,120);
	for (u_int32_t n=0; n < objects.size(); n++)
	{
		glPushMatrix();
		if (objects[n].tX != 0 || objects[n].tY != 0 || objects[n].tZ != 0)
		{
			glTranslatef(objects[n].tX, objects[n].tY, objects[n].tZ);
		}

		if (objects[n].rA != 0 || objects[n].rX != 0 || objects[n].rY != 0 || objects[n].rZ != 0)
		{
			glRotatef(objects[n].rA, objects[n].rX, objects[n].rY, objects[n].rZ);
		}

		if (objects[n].sX != 0 || objects[n].sY != 0 || objects[n].sZ != 0)
		{
			glScalef(objects[n].sX, objects[n].sY, objects[n].sZ);
		}

		for (u_int32_t p=0; p < objects[n].faces.size(); p++)
		{
			
			//CTextureManager::GetInstance()->BindTexture(objects[n].tris[p].textureIndex);
			glBegin(GL_TRIANGLES);
			
				glNormal3f(objects[n].faces[p].points[0].normal.x,
					  	   objects[n].faces[p].points[0].normal.y,
						   objects[n].faces[p].points[0].normal.z);
				glTexCoord2f(objects[n].faces[p].points[0].u,
						     objects[n].faces[p].points[0].v);
							 
				glVertex3f(objects[n].faces[p].points[0].x, 
						   objects[n].faces[p].points[0].y,
						   objects[n].faces[p].points[0].z);

				
				glNormal3f(objects[n].faces[p].points[0].normal.x,
						   objects[n].faces[p].points[0].normal.y,
						   objects[n].faces[p].points[0].normal.z);
				glTexCoord2f(objects[n].faces[p].points[1].u,
						     objects[n].faces[p].points[1].v);
							 
				glVertex3f(objects[n].faces[p].points[1].x, 
						   objects[n].faces[p].points[1].y,
						   objects[n].faces[p].points[1].z);

				
				glNormal3f(objects[n].faces[p].points[0].normal.x,
						   objects[n].faces[p].points[0].normal.y,
						   objects[n].faces[p].points[0].normal.z);
				glTexCoord2f(objects[n].faces[p].points[2].u,
						     objects[n].faces[p].points[2].v);
							 
				glVertex3f(objects[n].faces[p].points[2].x, 
						   objects[n].faces[p].points[2].y,
						   objects[n].faces[p].points[2].z);
			glEnd();
			

		}
		glPopMatrix();
	}
}

Väldigt rena OpenGL kommandon tycker jag. Det som kanske gör skillnad är att alla arrayer här är vector klasser från STL. Kan det vara där prestandaförlusten kommer ifrån?

tydalMedlem sedan juni 20033 788 inlägg
#2

Re: Debug vs Release

Alpha II skrev:

Vad är skillnaden mellan debug och release när man kompilerar?

Enkelt förklarat, blir det något fel när du kör programmet kan du se var i källkoden felet inträffat om du kör debug.

Debug ska du alltså bara använda när du behöver felsöka. Release är när programmet är som vanligt.

Alpha IIMedlem sedan maj 20002 579 inlägg
#3

Så man skall inte använda debug när man utvecklar, utan bara när programmet krånglar? Det är inte så att man inte märker vissa fel i release eller nåt liknande?

tydalMedlem sedan juni 20033 788 inlägg
#4

Alpha II skrev:

Det är inte så att man inte märker vissa fel i release eller nåt liknande?

Nja, du får varningar i debug som inte kommer i release.

Alpha IIMedlem sedan maj 20002 579 inlägg
#5

Med lite minskad användning av [] operatorn för vektorerna har jag lyckats öka min fps från 0.1 till 8, men fortfarande långt ifån de 50 jag får i release-mode.

Hur kommer det sig att [] operatorn fär vector är så slö i debug?

Vad kan jag göra mer för att öka hastigheten?
Just denna funktion som jag postade i första inlägget är otroligt långsam. Bara för att den ritade upp några boxar så sjönk fpsen väldigt väldigt mycket.

spangoMedlem sedan juni 20006 147 inlägg
#6

Alpha II skrev:

Hur kommer det sig att [] operatorn fär vector är så slö i debug?

En (okvalificerad) gissning är att den i debug gör bounds checking, men inte i release.

PeWMedlem sedan juni 20006 839 inlägg
#7

Om det är så, så torde det underlätta att istället köra med en egendefinierad vector.

Genererad på 376 ms · cache AV · v20260730165559-full.f96bc7eb