SlideShare una empresa de Scribd logo
Javier Cantón Ferrero
@jcant0n
http://geeks.ms/blogs/jcanton/
Optimizando un motor de
videojuegos en C#
Problema 1
Structs
• Objetos con una vida muy corta de tiempo
• Mejor cuando solo trabaja el Stack
• Tener en cuenta el GC
• Usar paso por referencia siempre que sea posible
Stack Heap
p = 0x??????
Stack Heap
p = 0x000000
Stack Heap
p = 0x123456
Player
Name = “Mario”
Life = 90
Stack Heap
Player
Name = “Mario”
Life = 30
p = 0x123456
value = 30
Stack Heap
Player
Name = “Mario”
Life = 30
p = 0x123456
value = 20
Ejemplo
Matrix a, b, c
c = Math.Multiply( a, b )
4 bytes / float
16 floats / Matrix
3 copias
3 * 16 * 4 = 192 bytes
Garbage Collector
• Salta cada vez que el heap crece en un determinado tamaño
4 bytes / float
16 floats / Matrix
3 copias
3 * 16 * 4 = 192 bytes
1MB = 1048576 bytes
1048576 / 192 bytes = 5461,3
5461,3 / 60 fps = 91,02
Profiler
private void UpdateMatrices(Matrix world0, Matrix view0, Matrix projection0,
Matrix world1, Matrix view1, Matrix projection1,
Matrix world2, Matrix view2, Matrix projection2,
Matrix world3, Matrix view3, Matrix projection3,
Matrix world4, Matrix view4, Matrix projection4,
...
Test
private void UpdateMatricesOptimized(ref Matrix world0, ref Matrix view0, ref Matrix projection0,
ref Matrix world1, ref Matrix view1, ref Matrix projection1,
ref Matrix world2, ref Matrix view2, ref Matrix projection2,
ref Matrix world3, ref Matrix view3, ref Matrix projection3,
ref Matrix world4, ref Matrix view4, ref Matrix projection4,
ref Matrix world5, ref Matrix view5, ref Matrix projection5,
…
Results
Problema 2
Memoria compartida entre structs
public struct Vector
{
public float X;
public float Y;
public float Z;
public Vector(float x, float y, float z)
{
this.X = x;
this.Y = y;
this.Z = z;
}
public override string ToString()
{
return string.Format("(X:{0} Y:{1} Z:{2})", X, Y, Z);
}
}
public void XNAMethod(ref Microsoft.Xna.Framework.Vector3 vector)
Primera Idea
Vector myVector = new Vector(1,2,3);
Vector3 xnaVector = (Vector3)myVector;
Error 1 Cannot convert type 'WindowsGame1.Vector' to 'Microsoft.Xna.Framework.Vector3'
Vector myVector = new Vector(1,2,3);
Vector3 xnaVector = new Vector3() { X = myVector.X, Y = myVector.Y, Z = myVector.Z };
Segunda idea
[StructLayout(LayoutKind.Explicit)]
public struct UnionVector
{
[FieldOffset(0)]
public Microsoft.Xna.Framework.Vector3 XnaVector;
[FieldOffset(0)]
public OpenTK.Vector3 OpenTkVector;
[FieldOffset(0)]
public float X;
[FieldOffset(4)]
public float Y;
[FieldOffset(8)]
public float Z;
}
UnionVector myVector = new UnionVector() { X = 1, Y = 2, Z = 3};
Vector3 xnaVector = myVector.XnaVector;
OpenTK.Vector3 oTKVector3 = myVector.OpenTkVector;
Tercera idea
Vector vector = new Vector(1, 2, 3);
unsafe
{
// Creamos un puntero de nuestro tipo de struct que apunta a la dirección
de memoria de nuestro vector.
Vector* pVector = &vector;
// Creamos un puntero del tipo de struct de XNA y hacemos un casting entre
punteros.
Vector3* pVector3 = (Vector3 *)pVector;
// Los métodos de XNA no permiten pasar como parámetro un puntero, por lo
que necesitamos la última conversión.
Vector3 vector3 = *pVector3;
XNAMethod(vector3);
}
Tercera idea
Vector vector = new Vector(1, 2, 3);
unsafe
{
XNAMethod(*(Vector3*)&vector);
}
Vector vector = new Vector(1, 2, 3);
unsafe
{
XNAMethod(ref *(Vector3*)&vector);
}
Problema 3
Primera idea
Thank you
Javier Cantón Ferrero
@jcant0n
http://geeks.ms/blogs/jcanton/

Más contenido relacionado

La actualidad más candente

Calculus :Tutorial 4
Calculus :Tutorial 4Calculus :Tutorial 4
Calculus :Tutorial 4
Nuril Ekma
 
Calculus :Tutorial 5
Calculus :Tutorial 5Calculus :Tutorial 5
Calculus :Tutorial 5
Nuril Ekma
 
Tarea de Derivadas
Tarea de DerivadasTarea de Derivadas
Tarea de Derivadas
Andres Mendoza
 
Semana 9 del 24 al 28 de mayo
Semana 9 del 24 al 28 de mayoSemana 9 del 24 al 28 de mayo
Semana 9 del 24 al 28 de mayo
LorenaCovarrubias12
 
Exa calcu int-2-do.parcial-2021
Exa calcu int-2-do.parcial-2021Exa calcu int-2-do.parcial-2021
Exa calcu int-2-do.parcial-2021
LorenaCovarrubias12
 
Resta de funciones.mejorado
Resta de funciones.mejoradoResta de funciones.mejorado
Resta de funciones.mejorado
Gunji003
 
Presentación3d
Presentación3dPresentación3d
Presentación3d
mephistodark
 
Sección 6 – 2
Sección 6 – 2Sección 6 – 2
Sección 6 – 2
Angel Carreras
 
Desarrollo De Un Display
Desarrollo De Un DisplayDesarrollo De Un Display
Desarrollo De Un Display
Gerardo Montiel
 
FCD Guía 3. derivadas y aplicaciones
FCD Guía 3. derivadas y aplicacionesFCD Guía 3. derivadas y aplicaciones
FCD Guía 3. derivadas y aplicaciones
john fredy GONZALEZ RENA
 
Unidad 3 problema 3
Unidad 3 problema 3Unidad 3 problema 3
Unidad 3 problema 3
Helenna Fabela
 
Vectores
VectoresVectores

La actualidad más candente (12)

Calculus :Tutorial 4
Calculus :Tutorial 4Calculus :Tutorial 4
Calculus :Tutorial 4
 
Calculus :Tutorial 5
Calculus :Tutorial 5Calculus :Tutorial 5
Calculus :Tutorial 5
 
Tarea de Derivadas
Tarea de DerivadasTarea de Derivadas
Tarea de Derivadas
 
Semana 9 del 24 al 28 de mayo
Semana 9 del 24 al 28 de mayoSemana 9 del 24 al 28 de mayo
Semana 9 del 24 al 28 de mayo
 
Exa calcu int-2-do.parcial-2021
Exa calcu int-2-do.parcial-2021Exa calcu int-2-do.parcial-2021
Exa calcu int-2-do.parcial-2021
 
Resta de funciones.mejorado
Resta de funciones.mejoradoResta de funciones.mejorado
Resta de funciones.mejorado
 
Presentación3d
Presentación3dPresentación3d
Presentación3d
 
Sección 6 – 2
Sección 6 – 2Sección 6 – 2
Sección 6 – 2
 
Desarrollo De Un Display
Desarrollo De Un DisplayDesarrollo De Un Display
Desarrollo De Un Display
 
FCD Guía 3. derivadas y aplicaciones
FCD Guía 3. derivadas y aplicacionesFCD Guía 3. derivadas y aplicaciones
FCD Guía 3. derivadas y aplicaciones
 
Unidad 3 problema 3
Unidad 3 problema 3Unidad 3 problema 3
Unidad 3 problema 3
 
Vectores
VectoresVectores
Vectores
 

Destacado

Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave Engine
Eduard Tomàs
 
WaveEngine services
WaveEngine servicesWaveEngine services
WaveEngine services
waveengineteam
 
Introduction to wave engine
Introduction to wave engineIntroduction to wave engine
Introduction to wave engine
waveengineteam
 
Advertising in w8 and wp8
Advertising in w8 and wp8Advertising in w8 and wp8
Advertising in w8 and wp8
waveengineteam
 
WaveEngine 3D components
WaveEngine 3D componentsWaveEngine 3D components
WaveEngine 3D components
waveengineteam
 
07. Data Structures
07. Data Structures07. Data Structures
07. Data Structures
Amin Babadi
 
Xna game studio presentación 01
Xna game studio   presentación 01Xna game studio   presentación 01
Xna game studio presentación 01
Juan Cardona
 
Xna game studio presentación 03
Xna game studio   presentación 03Xna game studio   presentación 03
Xna game studio presentación 03
Juan Cardona
 
[Code Camp 2009] Desarrollo de juegos con XNA (Ángel Arcoraci)
[Code Camp 2009] Desarrollo de juegos con XNA (Ángel Arcoraci)[Code Camp 2009] Desarrollo de juegos con XNA (Ángel Arcoraci)
[Code Camp 2009] Desarrollo de juegos con XNA (Ángel Arcoraci)
Microsoft Argentina y Uruguay [Official Space]
 
08. Design Patterns
08. Design Patterns08. Design Patterns
08. Design Patterns
Amin Babadi
 
02. Platforms and Modes
02. Platforms and Modes02. Platforms and Modes
02. Platforms and Modes
Amin Babadi
 
Teoría xna
Teoría xnaTeoría xna
Teoría xna
Dada3311
 
Desarrollo De Videojuegos Con Xna
Desarrollo De Videojuegos Con XnaDesarrollo De Videojuegos Con Xna
Desarrollo De Videojuegos Con Xna
César Reneses
 
Xna game studio presentación 02
Xna game studio   presentación 02Xna game studio   presentación 02
Xna game studio presentación 02
Juan Cardona
 
Una breve resParte I. Desarrollo de VideoJuego: MonoGame en Windows 8.
Una breve resParte I. Desarrollo de VideoJuego: MonoGame en Windows 8.Una breve resParte I. Desarrollo de VideoJuego: MonoGame en Windows 8.
Una breve resParte I. Desarrollo de VideoJuego: MonoGame en Windows 8.
Juan Manuel
 
Semilerovideojuegos xna
Semilerovideojuegos xnaSemilerovideojuegos xna
Semilerovideojuegos xna
Guiovanna Sabogal
 
Xna game studio presentación 04
Xna game studio   presentación 04Xna game studio   presentación 04
Xna game studio presentación 04
Juan Cardona
 
Presentacion04
Presentacion04Presentacion04
Presentacion04
Titiushko Jazz
 
09. User Input
09. User Input09. User Input
09. User Input
Amin Babadi
 
Presentacion01
Presentacion01Presentacion01
Presentacion01
Titiushko Jazz
 

Destacado (20)

Introducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave EngineIntroducción al desarrollo de videojuegos 2D con Wave Engine
Introducción al desarrollo de videojuegos 2D con Wave Engine
 
WaveEngine services
WaveEngine servicesWaveEngine services
WaveEngine services
 
Introduction to wave engine
Introduction to wave engineIntroduction to wave engine
Introduction to wave engine
 
Advertising in w8 and wp8
Advertising in w8 and wp8Advertising in w8 and wp8
Advertising in w8 and wp8
 
WaveEngine 3D components
WaveEngine 3D componentsWaveEngine 3D components
WaveEngine 3D components
 
07. Data Structures
07. Data Structures07. Data Structures
07. Data Structures
 
Xna game studio presentación 01
Xna game studio   presentación 01Xna game studio   presentación 01
Xna game studio presentación 01
 
Xna game studio presentación 03
Xna game studio   presentación 03Xna game studio   presentación 03
Xna game studio presentación 03
 
[Code Camp 2009] Desarrollo de juegos con XNA (Ángel Arcoraci)
[Code Camp 2009] Desarrollo de juegos con XNA (Ángel Arcoraci)[Code Camp 2009] Desarrollo de juegos con XNA (Ángel Arcoraci)
[Code Camp 2009] Desarrollo de juegos con XNA (Ángel Arcoraci)
 
08. Design Patterns
08. Design Patterns08. Design Patterns
08. Design Patterns
 
02. Platforms and Modes
02. Platforms and Modes02. Platforms and Modes
02. Platforms and Modes
 
Teoría xna
Teoría xnaTeoría xna
Teoría xna
 
Desarrollo De Videojuegos Con Xna
Desarrollo De Videojuegos Con XnaDesarrollo De Videojuegos Con Xna
Desarrollo De Videojuegos Con Xna
 
Xna game studio presentación 02
Xna game studio   presentación 02Xna game studio   presentación 02
Xna game studio presentación 02
 
Una breve resParte I. Desarrollo de VideoJuego: MonoGame en Windows 8.
Una breve resParte I. Desarrollo de VideoJuego: MonoGame en Windows 8.Una breve resParte I. Desarrollo de VideoJuego: MonoGame en Windows 8.
Una breve resParte I. Desarrollo de VideoJuego: MonoGame en Windows 8.
 
Semilerovideojuegos xna
Semilerovideojuegos xnaSemilerovideojuegos xna
Semilerovideojuegos xna
 
Xna game studio presentación 04
Xna game studio   presentación 04Xna game studio   presentación 04
Xna game studio presentación 04
 
Presentacion04
Presentacion04Presentacion04
Presentacion04
 
09. User Input
09. User Input09. User Input
09. User Input
 
Presentacion01
Presentacion01Presentacion01
Presentacion01
 

Similar a Optimizing a C# engine

Algoritmos Evolutivos para IA en Videojuegos
Algoritmos Evolutivos para IA en VideojuegosAlgoritmos Evolutivos para IA en Videojuegos
Algoritmos Evolutivos para IA en Videojuegos
Pablo García Sánchez
 
Paralela6
Paralela6Paralela6
Paralela6
Abraham Zamudio
 
Xna game studio presentación 05
Xna game studio   presentación 05Xna game studio   presentación 05
Xna game studio presentación 05
Juan Cardona
 
Matlab graficos
Matlab graficosMatlab graficos
Matlab graficos
Erick2202
 
Matlab graficos
Matlab graficosMatlab graficos
Matlab graficos
Jhony Tacuri
 
Final
FinalFinal
Relacion iii de pendientes 2ºeso
Relacion iii de pendientes 2ºesoRelacion iii de pendientes 2ºeso
Relacion iii de pendientes 2ºeso
ieslaescribana
 
20 ejercicios propuestos
20 ejercicios propuestos20 ejercicios propuestos
20 ejercicios propuestos
SykesPonce
 
Algebra
AlgebraAlgebra
Presentacion05
Presentacion05Presentacion05
Presentacion05
Titiushko Jazz
 
Presentacion05
Presentacion05Presentacion05
Presentacion05
Titiushko Jazz
 
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNVarios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
Salvador Fernández Fernández
 
Generación procedimental de contenido (+ Pseudocódigo)
Generación procedimental de contenido (+ Pseudocódigo)Generación procedimental de contenido (+ Pseudocódigo)
Generación procedimental de contenido (+ Pseudocódigo)
Federico Peinado
 
Java
JavaJava
Java
JavaJava
Fernandapaez
FernandapaezFernandapaez
Fernandapaez
Fernanda Paez
 
Las funciones modulo 18 semana 1
Las funciones modulo 18 semana 1Las funciones modulo 18 semana 1
Las funciones modulo 18 semana 1
sandriita26
 
Ejercicios para Repasar 9
Ejercicios para Repasar 9Ejercicios para Repasar 9
Ejercicios para Repasar 9
Beatriz Hernández
 
No lineal
No linealNo lineal
No lineal
Claudio Aballay
 
HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5
Plain Concepts
 

Similar a Optimizing a C# engine (20)

Algoritmos Evolutivos para IA en Videojuegos
Algoritmos Evolutivos para IA en VideojuegosAlgoritmos Evolutivos para IA en Videojuegos
Algoritmos Evolutivos para IA en Videojuegos
 
Paralela6
Paralela6Paralela6
Paralela6
 
Xna game studio presentación 05
Xna game studio   presentación 05Xna game studio   presentación 05
Xna game studio presentación 05
 
Matlab graficos
Matlab graficosMatlab graficos
Matlab graficos
 
Matlab graficos
Matlab graficosMatlab graficos
Matlab graficos
 
Final
FinalFinal
Final
 
Relacion iii de pendientes 2ºeso
Relacion iii de pendientes 2ºesoRelacion iii de pendientes 2ºeso
Relacion iii de pendientes 2ºeso
 
20 ejercicios propuestos
20 ejercicios propuestos20 ejercicios propuestos
20 ejercicios propuestos
 
Algebra
AlgebraAlgebra
Algebra
 
Presentacion05
Presentacion05Presentacion05
Presentacion05
 
Presentacion05
Presentacion05Presentacion05
Presentacion05
 
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióNVarios Algoritmos Voraces De DecisióN Y OptimizacióN
Varios Algoritmos Voraces De DecisióN Y OptimizacióN
 
Generación procedimental de contenido (+ Pseudocódigo)
Generación procedimental de contenido (+ Pseudocódigo)Generación procedimental de contenido (+ Pseudocódigo)
Generación procedimental de contenido (+ Pseudocódigo)
 
Java
JavaJava
Java
 
Java
JavaJava
Java
 
Fernandapaez
FernandapaezFernandapaez
Fernandapaez
 
Las funciones modulo 18 semana 1
Las funciones modulo 18 semana 1Las funciones modulo 18 semana 1
Las funciones modulo 18 semana 1
 
Ejercicios para Repasar 9
Ejercicios para Repasar 9Ejercicios para Repasar 9
Ejercicios para Repasar 9
 
No lineal
No linealNo lineal
No lineal
 
HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5HTML Tour - Programación de Videojuegos HTML5
HTML Tour - Programación de Videojuegos HTML5
 

Más de Javier Cantón Ferrero

Writing high performance code in Net 7.pptx
Writing high performance code in Net 7.pptxWriting high performance code in Net 7.pptx
Writing high performance code in Net 7.pptx
Javier Cantón Ferrero
 
Writing high performance code in NetCore 3.0
Writing high performance code in NetCore 3.0Writing high performance code in NetCore 3.0
Writing high performance code in NetCore 3.0
Javier Cantón Ferrero
 
Freakend 2019: Preparing for Vulkan
Freakend 2019: Preparing for VulkanFreakend 2019: Preparing for Vulkan
Freakend 2019: Preparing for Vulkan
Javier Cantón Ferrero
 
WaveEngine Dotnet 2018
WaveEngine Dotnet 2018WaveEngine Dotnet 2018
WaveEngine Dotnet 2018
Javier Cantón Ferrero
 
Todo lo que no sabías sobre HoloLens
Todo lo que no sabías sobre HoloLensTodo lo que no sabías sobre HoloLens
Todo lo que no sabías sobre HoloLens
Javier Cantón Ferrero
 
Phong and Blinn Phong
Phong and Blinn PhongPhong and Blinn Phong
Phong and Blinn Phong
Javier Cantón Ferrero
 
Screen space Techniques
Screen space TechniquesScreen space Techniques
Screen space Techniques
Javier Cantón Ferrero
 
Light Pre Pass Deferred lighting
Light Pre Pass Deferred lightingLight Pre Pass Deferred lighting
Light Pre Pass Deferred lighting
Javier Cantón Ferrero
 
Xamarin Tecnhologies
Xamarin TecnhologiesXamarin Tecnhologies
Xamarin Tecnhologies
Javier Cantón Ferrero
 
Introduction to wave engine
Introduction to wave engineIntroduction to wave engine
Introduction to wave engine
Javier Cantón Ferrero
 

Más de Javier Cantón Ferrero (10)

Writing high performance code in Net 7.pptx
Writing high performance code in Net 7.pptxWriting high performance code in Net 7.pptx
Writing high performance code in Net 7.pptx
 
Writing high performance code in NetCore 3.0
Writing high performance code in NetCore 3.0Writing high performance code in NetCore 3.0
Writing high performance code in NetCore 3.0
 
Freakend 2019: Preparing for Vulkan
Freakend 2019: Preparing for VulkanFreakend 2019: Preparing for Vulkan
Freakend 2019: Preparing for Vulkan
 
WaveEngine Dotnet 2018
WaveEngine Dotnet 2018WaveEngine Dotnet 2018
WaveEngine Dotnet 2018
 
Todo lo que no sabías sobre HoloLens
Todo lo que no sabías sobre HoloLensTodo lo que no sabías sobre HoloLens
Todo lo que no sabías sobre HoloLens
 
Phong and Blinn Phong
Phong and Blinn PhongPhong and Blinn Phong
Phong and Blinn Phong
 
Screen space Techniques
Screen space TechniquesScreen space Techniques
Screen space Techniques
 
Light Pre Pass Deferred lighting
Light Pre Pass Deferred lightingLight Pre Pass Deferred lighting
Light Pre Pass Deferred lighting
 
Xamarin Tecnhologies
Xamarin TecnhologiesXamarin Tecnhologies
Xamarin Tecnhologies
 
Introduction to wave engine
Introduction to wave engineIntroduction to wave engine
Introduction to wave engine
 

Último

Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
AMADO SALVADOR
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
YaniEscobar2
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
maralache30
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
MiguelAtencio10
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
KukiiSanchez
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
Festibity
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Festibity
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
JuanaNT7
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
cbtechchihuahua
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
larapalaciosmonzon28
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
al050121024
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
larapalaciosmonzon28
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Festibity
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
doctorsoluciones34
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
julio05042006
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
larapalaciosmonzon28
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
mantenimientocarbra6
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
AMADO SALVADOR
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
YashiraPaye
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
AMADO SALVADOR
 

Último (20)

Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor OficialCatalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
Catalogo Cajas Fuertes BTV Amado Salvador Distribuidor Oficial
 
computacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADOcomputacion global 3.pdf pARA TERCER GRADO
computacion global 3.pdf pARA TERCER GRADO
 
HERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptxHERRAMIENTAS WEB--------------------.pptx
HERRAMIENTAS WEB--------------------.pptx
 
mantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptxmantenimiento de chasis y carroceria1.pptx
mantenimiento de chasis y carroceria1.pptx
 
TIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololoTIC en educacion.rtf.docxlolololololololo
TIC en educacion.rtf.docxlolololololololo
 
Informació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdfInformació Projecte Iniciativa TIC HPE.pdf
Informació Projecte Iniciativa TIC HPE.pdf
 
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdfInformació Projecte Iniciativa TIC SOPRA STERIA.pdf
Informació Projecte Iniciativa TIC SOPRA STERIA.pdf
 
Gabinete, puertos y dispositivos que se conectan al case
Gabinete,  puertos y  dispositivos que se conectan al caseGabinete,  puertos y  dispositivos que se conectan al case
Gabinete, puertos y dispositivos que se conectan al case
 
Manual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputosManual de Soporte y mantenimiento de equipo de cómputos
Manual de Soporte y mantenimiento de equipo de cómputos
 
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfqedublogs info.docx asdasfasfsawqrdqwfqwfqwfq
edublogs info.docx asdasfasfsawqrdqwfqwfqwfq
 
Second Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro TapiaSecond Life, informe de actividad del maestro Tapia
Second Life, informe de actividad del maestro Tapia
 
Nuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsadNuevos tiempos, nuevos espacios.docxdsdsad
Nuevos tiempos, nuevos espacios.docxdsdsad
 
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdfProjecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
Projecte Iniciativa TIC 2024 KAWARU CONSULTING. inCV.pdf
 
Manual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputoManual de soporte y mantenimiento de equipo de cómputo
Manual de soporte y mantenimiento de equipo de cómputo
 
herramientas de sitio web 3.0 2024
herramientas de sitio web 3.0  2024herramientas de sitio web 3.0  2024
herramientas de sitio web 3.0 2024
 
Presentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre bloggerPresentación de Tic en educación y sobre blogger
Presentación de Tic en educación y sobre blogger
 
Manual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computoManual Web soporte y mantenimiento de equipo de computo
Manual Web soporte y mantenimiento de equipo de computo
 
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial ValenciaCatalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
Catalogo Buzones BTV Amado Salvador Distribuidor Oficial Valencia
 
Inteligencia Artificial
Inteligencia ArtificialInteligencia Artificial
Inteligencia Artificial
 
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador ValenciaCatalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
Catalogo Refrigeracion Miele Distribuidor Oficial Amado Salvador Valencia
 

Optimizing a C# engine

  • 3. Structs • Objetos con una vida muy corta de tiempo • Mejor cuando solo trabaja el Stack • Tener en cuenta el GC • Usar paso por referencia siempre que sea posible
  • 4. Stack Heap p = 0x??????
  • 5. Stack Heap p = 0x000000
  • 6. Stack Heap p = 0x123456 Player Name = “Mario” Life = 90
  • 7. Stack Heap Player Name = “Mario” Life = 30 p = 0x123456 value = 30
  • 8. Stack Heap Player Name = “Mario” Life = 30 p = 0x123456 value = 20
  • 9. Ejemplo Matrix a, b, c c = Math.Multiply( a, b ) 4 bytes / float 16 floats / Matrix 3 copias 3 * 16 * 4 = 192 bytes
  • 10. Garbage Collector • Salta cada vez que el heap crece en un determinado tamaño 4 bytes / float 16 floats / Matrix 3 copias 3 * 16 * 4 = 192 bytes 1MB = 1048576 bytes 1048576 / 192 bytes = 5461,3 5461,3 / 60 fps = 91,02
  • 12. private void UpdateMatrices(Matrix world0, Matrix view0, Matrix projection0, Matrix world1, Matrix view1, Matrix projection1, Matrix world2, Matrix view2, Matrix projection2, Matrix world3, Matrix view3, Matrix projection3, Matrix world4, Matrix view4, Matrix projection4, ... Test private void UpdateMatricesOptimized(ref Matrix world0, ref Matrix view0, ref Matrix projection0, ref Matrix world1, ref Matrix view1, ref Matrix projection1, ref Matrix world2, ref Matrix view2, ref Matrix projection2, ref Matrix world3, ref Matrix view3, ref Matrix projection3, ref Matrix world4, ref Matrix view4, ref Matrix projection4, ref Matrix world5, ref Matrix view5, ref Matrix projection5, …
  • 15. Memoria compartida entre structs public struct Vector { public float X; public float Y; public float Z; public Vector(float x, float y, float z) { this.X = x; this.Y = y; this.Z = z; } public override string ToString() { return string.Format("(X:{0} Y:{1} Z:{2})", X, Y, Z); } }
  • 16. public void XNAMethod(ref Microsoft.Xna.Framework.Vector3 vector) Primera Idea Vector myVector = new Vector(1,2,3); Vector3 xnaVector = (Vector3)myVector; Error 1 Cannot convert type 'WindowsGame1.Vector' to 'Microsoft.Xna.Framework.Vector3' Vector myVector = new Vector(1,2,3); Vector3 xnaVector = new Vector3() { X = myVector.X, Y = myVector.Y, Z = myVector.Z };
  • 17. Segunda idea [StructLayout(LayoutKind.Explicit)] public struct UnionVector { [FieldOffset(0)] public Microsoft.Xna.Framework.Vector3 XnaVector; [FieldOffset(0)] public OpenTK.Vector3 OpenTkVector; [FieldOffset(0)] public float X; [FieldOffset(4)] public float Y; [FieldOffset(8)] public float Z; } UnionVector myVector = new UnionVector() { X = 1, Y = 2, Z = 3}; Vector3 xnaVector = myVector.XnaVector; OpenTK.Vector3 oTKVector3 = myVector.OpenTkVector;
  • 18. Tercera idea Vector vector = new Vector(1, 2, 3); unsafe { // Creamos un puntero de nuestro tipo de struct que apunta a la dirección de memoria de nuestro vector. Vector* pVector = &vector; // Creamos un puntero del tipo de struct de XNA y hacemos un casting entre punteros. Vector3* pVector3 = (Vector3 *)pVector; // Los métodos de XNA no permiten pasar como parámetro un puntero, por lo que necesitamos la última conversión. Vector3 vector3 = *pVector3; XNAMethod(vector3); }
  • 19. Tercera idea Vector vector = new Vector(1, 2, 3); unsafe { XNAMethod(*(Vector3*)&vector); } Vector vector = new Vector(1, 2, 3); unsafe { XNAMethod(ref *(Vector3*)&vector); }
  • 22.
  • 23.
  • 24.
  • 25.
  • 26.
  • 27.
  • 28. Thank you Javier Cantón Ferrero @jcant0n http://geeks.ms/blogs/jcanton/