static void Main(string[] args) { string str = ""; #region ClasePrueba+ClaseB /* Fase02.ClasePrueba c = new Fase02.ClasePrueba(); Generador gPrueba = new Generador(c.GetType()); var serializadorPrueba = gPrueba.getSerializer(); if (serializadorPrueba != null) { string codigo = serializadorPrueba.codificar(c); Console.WriteLine(codigo); Fase02.ClasePrueba aux = new Fase02.ClasePrueba(); aux.var1 = 0; serializadorPrueba.decodificar(codigo, ref aux); Console.WriteLine(aux.var1 + "," + aux.var2.varB1 + "," + aux.var3); } else { Console.WriteLine("No se ha podido generar el serializador"); } */ #endregion #region Clase03Array /* Fase02.Clase03Array c3 = new Clase03Array(); Generador g3 = new Generador(c3.GetType()); dynamic serializador3 = g3.getSerializer(); if (serializador3 != null) { c3.var1 = new int[3]; for (int i = 0; i < 3; i++) { c3.var1[i] = i; } c3.var2 = new string[3]; for (int i = 0; i < 3; i++) { c3.var2[i] = i.ToString(); } c3.var4 = new int[3, 2, 2]; for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { c3.var4[i, j, k] = i * (j + 3) + (k * 3); } } } c3.var6 = new Dictionary<string, int>(); c3.var6.Add("cuatro", 4); c3.var6.Add("cinco", 5); c3.var6.Add("seis", 6); string codigo = serializador3.codificar(c3); Console.WriteLine(codigo); Fase02.Clase03Array c3aux = new Clase03Array(); serializador3.decodificar(codigo, ref c3aux); for (int i = 0; i < 3; i++) { Console.Write(c3aux.var1[i]); } Console.WriteLine(""); if(c3aux.var2 == null) { Console.Write("¡var2 no se ha serializado!"); } else { for (int i = 0; i < 3; i++) { Console.Write(c3aux.var2[i]); } } Console.WriteLine(""); for (int i = 0; i < 3; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 2; k++) { Console.Write(c3aux.var4[i, j, k]); } } } foreach(KeyValuePair<string, int> aux in c3aux.var6) { Console.WriteLine(aux.Key + " = " + aux.Value); } */ #endregion /* foreach (Fase02.ClaseViti i in c3aux.var4) { Console.WriteLine(i.v1.ToString() + "," + i.v2.ToString()); } foreach (KeyValuePair<int, string> i in c3aux.var5) { Console.WriteLine(i.Key.ToString() + "," + i.Value.ToString()); } } */ #region Clase01Basica /* Fase02.Clase01Basica c1 = new Clase01Basica(); c1.var1 = 2; c1.var2 = "Hola"; Generador g1 = new Generador(c1.GetType()); dynamic serializador1 = g1.getSerializer(); if (serializador1 != null) { Type tipo1 = serializador1.GetType(); Console.WriteLine(tipo1.FullName); string codigo = serializador1.codificar(c1); Console.WriteLine(codigo); c1 = new Fase02.Clase01Basica(); c1 = serializador1.decodificar(codigo, ref c1); Console.WriteLine(c1.var1); Console.WriteLine(c1.var2); } else { Console.WriteLine("No se ha podido generar el serializador"); } */ #endregion Fase02.Clase03Array c3a = new Clase03Array(); Generador g3a = new Generador(c3a.GetType()); dynamic serializador3a = g3a.getSerializer(); if (serializador3a != null) { #region Datos Clase03Array c3a.var1 = new int[3]; for (int i = 0; i < 3; i++) { c3a.var1[i] = i; } c3a.var2 = new string[3]; for (int i = 0; i < 3; i++) { c3a.var2[i] = "Número " + Convert.ToString(i); } c3a.var3 = new int[1, 2]; int cont = 0; for (int i = 0; i < 1; i++) { for (int j = 0; j < 2; j++) { c3a.var3[i, j] = cont; cont++; } } c3a.var4 = new int[1, 2, 3]; cont = 0; for (int i = 0; i < 1; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 3; k++) { c3a.var4[i, j, k] = cont; cont++; } } } c3a.var5 = new int[3][]; cont = 0; for (int i = 0; i < 3; i++) { int[] aux = new int[4]; for (int j = 0; j < 4; j++) { aux[j] = cont; cont++; } c3a.var5[i] = aux; } c3a.var6 = new Dictionary<string, int>(); c3a.var6.Add("uno", 1); c3a.var6.Add("dos", 2); c3a.var6.Add("tres", 3); #endregion string codigo = serializador3a.codificar(c3a); Console.WriteLine(codigo); Clase03Array aux3a = new Clase03Array(); Fase02.DentroDelArray auxDentro = new DentroDelArray(); auxDentro.uno = 1; auxDentro.dos = "dos"; Fase02.DentroDelArray auxDentro2 = new DentroDelArray(); auxDentro2.uno = 3; auxDentro2.dos = "cuatro"; aux3a.var7 = new DentroDelArray[2]; aux3a.var7[0] = auxDentro; aux3a.var7[1] = auxDentro2; serializador3a.decodificar(codigo, ref aux3a); for (int i = 0; i < 3; i++) { Console.Write(c3a.var1[i] + ","); } Console.WriteLine(); /* for (int i = 0; i < 3; i++) { Console.Write(c3a.var2[i] + ","); } Console.WriteLine(); */ for (int i = 0; i < 1; i++) { for (int j = 0; j < 2; j++) { Console.Write(c3a.var3[i, j] + ","); } } Console.WriteLine(); for (int i = 0; i < 1; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 3; k++) { Console.Write(c3a.var4[i, j, k]); } } } Console.WriteLine(); /* for (int i = 0; i < 3; i++) { int[] aux = new int[4]; for (int j = 0; j < 4; j++) { Console.Write(aux[j] + ","); } c3a.var5[i] = aux; Console.WriteLine(); } Console.WriteLine(); */ foreach(KeyValuePair<string, int> par in c3a.var6) { Console.WriteLine(par.Key + "=>" + par.Value); } } else { Console.WriteLine("No se ha podido generar el serializador"); } /* Fase02.Clase07ClaseConTodo c7 = new Clase07ClaseConTodo(); Generador g7 = new Generador(c7.GetType()); dynamic serializador7 = g7.getSerializer(); if (serializador7 != null) { Type tipo7 = serializador7.GetType(); Console.WriteLine(tipo7.FullName); Console.Write(serializador7.codificar(c7)); // serializador7.encode(c7, ref str); } else { Console.WriteLine("No se ha podido generar el serializador"); } */ Console.ReadKey(); }
public string benchmarkClase03Arrays() { string linea1 = ""; string linea2 = ""; /* * 03. Clase con arrays */ linea1 += "Clase03Arrays (Encode);"; linea2 += "Clase03Arrays (Decode);"; Console.WriteLine("============== Clase con distintos tipos de array (Clase03Array) ==============\r\n"); // Instanciando y rellenando campos Clase03Array c = new Clase03Array(); Clase03Array decoded; #region Datos Clase03Array c.var1 = new int[3]; for (int i = 0; i < 3; i++) { c.var1[i] = i; } c.var2 = new string[3]; for (int i = 0; i < 3; i++) { c.var2[i] = "Número " + Convert.ToString(i); } c.var3 = new int[1, 2]; int cont = 0; for (int i = 0; i < 1; i++) { for (int j = 0; j < 2; j++) { c.var3[i, j] = cont; cont++; } } c.var4 = new int[1, 2, 3]; cont = 0; for (int i = 0; i < 1; i++) { for (int j = 0; j < 2; j++) { for (int k = 0; k < 3; k++) { c.var4[i, j, k] = cont; cont++; } } } c.var5 = new int[3][]; cont = 0; for (int i = 0; i < 3; i++) { int[] aux = new int[4]; for (int j = 0; j < 4; j++) { aux[j] = cont; cont++; } c.var5[i] = aux; } c.var6 = new Dictionary<string, int>(); c.var6.Add("uno", 1); c.var6.Add("dos", 2); c.var6.Add("tres", 3); c.var7 = new DentroDelArray[2]; DentroDelArray aux1 = new DentroDelArray(); aux1.uno = 1; aux1.dos = "dos"; c.var7[0] = aux1; DentroDelArray aux2 = new DentroDelArray(); aux2.uno = 1; aux2.dos = "dos"; c.var7[1] = aux2; #endregion // - XMLSerializer #region XMLSerializer FileStream fs; linea1 += ";"; linea2 += ";"; /* *** Este serializador no admite arrays complejos XmlSerializer serializer = new XmlSerializer(typeof(Clase03Array)); TextWriter writer = new StreamWriter("fichero.txt"); watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { serializer.Serialize(writer, c); } watch.Stop(); writer.Close(); // Generamos el fichero de nuevo, con una única serialización writer = new StreamWriter("fichero.txt"); serializer.Serialize(writer, c); writer.Close(); Console.WriteLine("Codificación Clase01Basica con XMLSerializer: " + watch.ElapsedMilliseconds + " milisegundos"); linea1 += watch.ElapsedMilliseconds + ";"; watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { fs = new FileStream("fichero.txt", FileMode.Open); decoded = (Clase03Array)serializer.Deserialize(fs); fs.Close(); } watch.Stop(); Console.WriteLine("Decodificación Clase01Basica con XMLSerializer: " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; */ #endregion // - BinaryFormatter #region BinaryFormatter Console.WriteLine("Serialización con BinaryFormatter"); // Construct a BinaryFormatter and use it to serialize the data to the stream. BinaryFormatter formatter = new BinaryFormatter(); try { long tiempoTotal = 0; for (int i = 0; i < veces; i++) { fs = new FileStream("BinaryFormatter.dat", FileMode.Create); watch.Restart(); // Comienza a contar el tiempo formatter.Serialize(fs, c); watch.Stop(); tiempoTotal += watch.ElapsedMilliseconds; fs.Close(); } watch.Stop(); Console.WriteLine("Codificación Clase01Basica con BinaryFormatter: " + tiempoTotal + " milisegundos"); linea1 += tiempoTotal + ";"; } catch (SerializationException e) { Console.WriteLine("Failed to serialize. Reason: " + e.Message); throw; } fs = new FileStream("BinaryFormatter.dat", FileMode.Open); try { watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { decoded = (Clase03Array)formatter.Deserialize(fs); fs.Close(); fs = new FileStream("BinaryFormatter.dat", FileMode.Open); } watch.Stop(); fs.Close(); Console.WriteLine("Decodificación Clase01Basica con BinaryFormatter: " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; } catch (SerializationException e) { Console.WriteLine("Failed to deserialize. Reason: " + e.Message); throw; } finally { fs.Close(); } #endregion // - SOAPFormatter #region SOAPFormatter linea1 += ";"; linea2 += ";"; /* Console.WriteLine("Serialización con SOAPFormatter"); FileStream fs3 = new FileStream("DataFile.soap", FileMode.Create); fs3.Close(); SoapFormatter soapFormatter = new SoapFormatter(); try { long tiempoTotal = 0; for (int i = 0; i < veces; i++) { fs3 = new FileStream("DataFile.soap", FileMode.Create); watch.Restart(); // Comienza a contar el tiempo soapFormatter.Serialize(fs3, c); watch.Stop(); tiempoTotal += watch.ElapsedMilliseconds; fs3.Close(); } Console.WriteLine("Codificación Clase01Basica con SOAPFormatter: " + tiempoTotal + " milisegundos"); linea1 += tiempoTotal + ";"; } catch (SerializationException e) { Console.WriteLine("Failed to serialize. Reason: " + e.Message); throw; } fs3 = new FileStream("DataFile.soap", FileMode.Open); try { watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { decoded = (Clase03Array)soapFormatter.Deserialize(fs3); fs3.Close(); fs3 = new FileStream("DataFile.soap", FileMode.Open); } watch.Stop(); Console.WriteLine("Decodificación Clase01Basica con SOAPFormatter: " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; } catch (SerializationException e) { Console.WriteLine("Failed to deserialize. Reason: " + e.Message); throw; } finally { fs3.Close(); } */ #endregion // DataContractSerializer #region DataContractSerializer MemoryStream stream1 = new MemoryStream(); MemoryStream stream2 = new MemoryStream(); linea1 += ";"; linea2 += ";"; /* Console.WriteLine("Serialización con DataContractSerializer"); //Serialize the Record object to a memory stream using DataContractSerializer. DataContractSerializer DCserializer = new DataContractSerializer(typeof(Clase03Array)); for (int i = 0; i < veces; i++) { watch.Restart(); // Comienza a contar el tiempo DCserializer.WriteObject(stream1, c); watch.Stop(); if (i == 0) { stream1.Position = 0; stream1.CopyTo(stream2, (int)stream1.Length); } } Console.WriteLine("Codificación Clase01Basica con DataContractSerializer: " + watch.ElapsedMilliseconds + " milisegundos"); linea1 += watch.ElapsedMilliseconds + ";"; watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { stream2.Position = 0; //Deserialize the Record object back into a new record object. decoded = (Clase03Array)DCserializer.ReadObject(stream2); } watch.Stop(); Console.WriteLine("Decodificación Clase01Basica con DataContractSerializer: " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; */ #endregion DataContractSerializer // SharpSerializer (XML) #region SharpSerializer Console.WriteLine("Serialización con SharpSerializer (XML)"); var SharpSerializer = new SharpSerializer(); watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { SharpSerializer.Serialize(c, "SharpSerializer.xml"); } watch.Stop(); Console.WriteLine("Codificación Clase01Basica con SharpSerializer (XML): " + watch.ElapsedMilliseconds + " milisegundos"); linea1 += watch.ElapsedMilliseconds + ";"; watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { decoded = (Clase03Array)SharpSerializer.Deserialize("SharpSerializer.xml"); } watch.Stop(); Console.WriteLine("Decodificación Clase01Basica con SharpSerializer (XML): " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; #endregion SharpSerializer // SharpSerializer (Binario) #region SharpSerializer Console.WriteLine("Serialización con SharpSerializer (Binario)"); var SharpSerializer2 = new SharpSerializer(true); watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { SharpSerializer2.Serialize(c, "SharpSerializer.dat"); } watch.Stop(); Console.WriteLine("Codificación Clase01Basica con SharpSerializer (Binario): " + watch.ElapsedMilliseconds + " milisegundos"); linea1 += watch.ElapsedMilliseconds + ";"; watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { decoded = (Clase03Array)SharpSerializer2.Deserialize("SharpSerializer.dat"); } watch.Stop(); Console.WriteLine("Decodificación Clase01Basica con SharpSerializer (Binario): " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; #endregion SharpSerializer // Protobuf #region Protobuf linea1 += ";"; linea2 += ";"; /* Console.WriteLine("Serialización con Protobuf"); Stream protoStream = new MemoryStream(); Stream protoStream2 = new MemoryStream(); watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { ProtoBuf.Serializer.Serialize(protoStream, c); if (i == 0) { protoStream2.Position = 0; stream1.CopyTo(protoStream2, (int)protoStream.Length); } } watch.Stop(); Console.WriteLine("Codificación Clase01Basica con Protobuf: " + watch.ElapsedMilliseconds + " milisegundos"); linea1 += watch.ElapsedMilliseconds + ";"; watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { protoStream.Position = 0; decoded = ProtoBuf.Serializer.Deserialize<Clase03Array>(protoStream2); } watch.Stop(); Console.WriteLine("Decodificación Clase01Basica con Protobuf: " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; */ #endregion Protobuf // - Nuestro proyecto en CSV #region NuestroProyecto(CSV) Console.WriteLine("Serialización con nuestro proyecto (CSV)"); // Generando el serializador a partir del tipo Fase06.Generador g1 = new Fase06.Generador(c.GetType()); dynamic serializador1 = g1.getSerializer(); string str = ""; if (serializador1 != null) { watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { str = serializador1.codificar(c); // strSerializado = Clase01BasicaCodec.codificar(c1); } watch.Stop(); Console.WriteLine("Codificación Clase01Basica con nuestro proyecto (CSV): " + watch.ElapsedMilliseconds + " milisegundos"); linea1 += watch.ElapsedMilliseconds + ";"; decoded = new Clase03Array(); watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { serializador1.decodificar(str, ref decoded); } watch.Stop(); Console.WriteLine("Decodificación Clase01Basica con nuestro proyecto (CSV): " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; } else { Console.WriteLine("Error generando el serializador"); } #endregion NuestroProyecto(CSV) // - Nuestro proyecto en XML #region NuestroProyecto(XML) Console.WriteLine("Serialización con nuestro proyecto en XML"); // Generando el serializador a partir del tipo g1 = new Fase06.Generador(c.GetType(), "XML"); serializador1 = g1.getSerializer(); if (serializador1 != null) { watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { str = serializador1.codificar(c); } watch.Stop(); Console.WriteLine("Codificación Clase01Basica con nuestro proyecto (XML): " + watch.ElapsedMilliseconds + " milisegundos"); linea1 += watch.ElapsedMilliseconds + ";"; decoded = new Clase03Array(); watch.Restart(); // Comienza a contar el tiempo for (int i = 0; i < veces; i++) { serializador1.decodificar(str, ref decoded); } watch.Stop(); Console.WriteLine("Decodificación Clase01Basica con nuestro proyecto (XML): " + watch.ElapsedMilliseconds + " milisegundos"); linea2 += watch.ElapsedMilliseconds + ";"; } else { Console.WriteLine("Error generando el serializador"); } return linea1 + "\r\n" + linea2; #endregion NuestroProyecto(XML) }