SlideShare una empresa de Scribd logo
1 de 28
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

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 EngineEduard Tomàs
 
Introduction to wave engine
Introduction to wave engineIntroduction to wave engine
Introduction to wave enginewaveengineteam
 
Advertising in w8 and wp8
Advertising in w8 and wp8Advertising in w8 and wp8
Advertising in w8 and wp8waveengineteam
 
WaveEngine 3D components
WaveEngine 3D componentsWaveEngine 3D components
WaveEngine 3D componentswaveengineteam
 
07. Data Structures
07. Data Structures07. Data Structures
07. Data StructuresAmin Babadi
 
Xna game studio presentación 01
Xna game studio   presentación 01Xna game studio   presentación 01
Xna game studio presentación 01Juan Cardona
 
Xna game studio presentación 03
Xna game studio   presentación 03Xna game studio   presentación 03
Xna game studio presentación 03Juan Cardona
 
08. Design Patterns
08. Design Patterns08. Design Patterns
08. Design PatternsAmin Babadi
 
02. Platforms and Modes
02. Platforms and Modes02. Platforms and Modes
02. Platforms and ModesAmin Babadi
 
Teoría xna
Teoría xnaTeoría xna
Teoría xnaDada3311
 
Desarrollo De Videojuegos Con Xna
Desarrollo De Videojuegos Con XnaDesarrollo De Videojuegos Con Xna
Desarrollo De Videojuegos Con XnaCésar Reneses
 
Xna game studio presentación 02
Xna game studio   presentación 02Xna game studio   presentación 02
Xna game studio presentación 02Juan 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
 
Xna game studio presentación 04
Xna game studio   presentación 04Xna game studio   presentación 04
Xna game studio presentación 04Juan Cardona
 

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 VideojuegosPablo García Sánchez
 
Xna game studio presentación 05
Xna game studio   presentación 05Xna game studio   presentación 05
Xna game studio presentación 05Juan Cardona
 
Matlab graficos
Matlab graficosMatlab graficos
Matlab graficosErick2202
 
Relacion iii de pendientes 2ºeso
Relacion iii de pendientes 2ºesoRelacion iii de pendientes 2ºeso
Relacion iii de pendientes 2ºesoieslaescribana
 
20 ejercicios propuestos
20 ejercicios propuestos20 ejercicios propuestos
20 ejercicios propuestosSykesPonce
 
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óNSalvador 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
 
Las funciones modulo 18 semana 1
Las funciones modulo 18 semana 1Las funciones modulo 18 semana 1
Las funciones modulo 18 semana 1sandriita26
 
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 HTML5Plain 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

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

LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptchaverriemily794
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxAlexander López
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxAlexander López
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMidwarHenryLOZAFLORE
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxGESTECPERUSAC
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfjeondanny1997
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel tallerValentinaTabares11
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxAlexander López
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxaylincamaho
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadMiguelAngelVillanuev48
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramDIDIERFERNANDOGUERRE
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELmaryfer27m
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxMariaBurgos55
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxJOSEMANUELHERNANDEZH11
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativaAdrianaMartnez618894
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son241514984
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxNombre Apellidos
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx241523733
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfSergioMendoza354770
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxJOSEFERNANDOARENASCA
 

Último (20)

LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).pptLUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
LUXOMETRO EN SALUD OCUPACIONAL(FINAL).ppt
 
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptxLAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
LAS_TIC_COMO_HERRAMIENTAS_EN_LA_INVESTIGACIÓN.pptx
 
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptxEl_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
El_Blog_como_herramienta_de_publicacion_y_consulta_de_investigacion.pptx
 
Mapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptxMapa-conceptual-del-Origen-del-Universo-3.pptx
Mapa-conceptual-del-Origen-del-Universo-3.pptx
 
Tecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptxTecnologias Starlink para el mundo tec.pptx
Tecnologias Starlink para el mundo tec.pptx
 
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdfLa Electricidad Y La Electrónica Trabajo Tecnología.pdf
La Electricidad Y La Electrónica Trabajo Tecnología.pdf
 
Excel (1) tecnologia.pdf trabajo Excel taller
Excel  (1) tecnologia.pdf trabajo Excel tallerExcel  (1) tecnologia.pdf trabajo Excel taller
Excel (1) tecnologia.pdf trabajo Excel taller
 
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptxGoogle-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
Google-Meet-como-herramienta-para-realizar-reuniones-virtuales.pptx
 
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptxMedidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
Medidas de formas, coeficiente de asimetría y coeficiente de curtosis.pptx
 
Presentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidadPresentación inteligencia artificial en la actualidad
Presentación inteligencia artificial en la actualidad
 
Explorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ramExplorando la historia y funcionamiento de la memoria ram
Explorando la historia y funcionamiento de la memoria ram
 
El uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFELEl uso delas tic en la vida cotidiana MFEL
El uso delas tic en la vida cotidiana MFEL
 
Segunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptxSegunda ley de la termodinámica TERMODINAMICA.pptx
Segunda ley de la termodinámica TERMODINAMICA.pptx
 
Hernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptxHernandez_Hernandez_Practica web de la sesion 11.pptx
Hernandez_Hernandez_Practica web de la sesion 11.pptx
 
definicion segun autores de matemáticas educativa
definicion segun autores de matemáticas  educativadefinicion segun autores de matemáticas  educativa
definicion segun autores de matemáticas educativa
 
El uso de las tic en la vida ,lo importante que son
El uso de las tic en la vida ,lo importante  que sonEl uso de las tic en la vida ,lo importante  que son
El uso de las tic en la vida ,lo importante que son
 
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptxCrear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
Crear un recurso multimedia. Maricela_Ponce_DomingoM1S3AI6-1.pptx
 
GonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptxGonzalezGonzalez_Karina_M1S3AI6... .pptx
GonzalezGonzalez_Karina_M1S3AI6... .pptx
 
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdfPARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
PARTES DE UN OSCILOSCOPIO ANALOGICO .pdf
 
Arenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptxArenas Camacho-Practica tarea Sesión 12.pptx
Arenas Camacho-Practica tarea Sesión 12.pptx
 

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/