Ejemplo n.º 1
0
        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();
        }
Ejemplo n.º 2
0
        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)
        }