Προς το περιεχόμενο

[Tips]Binary vs ASCI (text)


Evgenios1

Προτεινόμενες αναρτήσεις

Δημοσ.

Γεια σας.

Επειδη δεν βρικα κανα καλο test (binary vs text) στα ελληνικα, ειπα να κανω ενα :-D.

Το εν λογο νημα ειναι για τα search

Δε θα εξηγησω τι ειναι binary και τι asci, η wiki.org τα λεει μια χαρα.

Το προγραμμα γραφτηκε σε c# με .net 4 (2 στη περιπτωση). Το τεστ ειναι 4 κομματια

α)Εγγραφη 40,000,000 αντικειμενων τυπου int σε binary format

β)Εγγραφη 40,000,000 αντικειμενων τυπου int σε ASCI format

γ)Διαβασμα 40,000,000 αντικειμενων τυπου int απο binary format

δ)Διαβασμα 40,000,000 αντικειμενων τυπου int απο ASCI format

edit: τα 40,000,000 int εχουν random value

Το αποτελεσμα

Microsoft Windows XP [Version 5.1.2600]

© Copyright 1985-2001 Microsoft Corp.

 

C:\Documents and Settings\Admin>cd..

 

C:\Documents and Settings>cd

C:\Documents and Settings

 

C:\Documents and Settings>cd..

 

C:\>speedtest.exe

testing 40000000 ints

Φάση Α: Ολοκληρώθηκε

Φάση B: Ολοκληρώθηκε

Φάση Γ: Ολοκληρώθηκε

Φάση Δ: Ολοκληρώθηκε

----------------------------- RESULT -------------------------

Binary read

Start:13/7/2009 11:26:06 μμ

End:13/7/2009 11:26:15 μμ

Size:152 MBytes

 

Binary write

Start:13/7/2009 11:24:56 μμ

End:13/7/2009 11:24:59 μμ

Size:152 MBytes

 

Text read

Start:13/7/2009 11:26:15 μμ

End:13/7/2009 11:27:24 μμ

Size:399 MBytes

 

Text write

Start:13/7/2009 11:25:00 μμ

End:13/7/2009 11:26:06 μμ

Size:399 MBytes

 

C:\>

Να και ενα ωραιο screen

post-103086-129063014981_thumb.jpg

 

Το που θα χρησιμοποιησει καποιος bin ειναι δικο του θεμα.

 

το προγραμμα.

 

>using System;
using System.Text;
using System.IO;

namespace ConsoleApplication1
{
   class Program
   {
       static readonly string BinFile = @"C:\speedtest.bin";
       static readonly string TextFile = @"C:\speedtest.txt";
       static readonly int Elements = 1000 * 1000 * 40;
       static void Main(string[] args)
       {
           
           var buffer = new int[Elements];
           var random = new Random();
           Console.WriteLine("testing {0} ints",Elements);
           myResult textWriteResult;
           myResult binWriteResult;
           myResult textReadResult;
           myResult binReadResult;

           for (int i = 0; i < Elements; i++)
               buffer[i] = random.Next();

           #region Write Bin
           var file = File.Create(BinFile);
           var writer = new BinaryWriter(file);
           binWriteResult = new myResult { start = DateTime.Now, elements = Elements, size = Elements * 4 };
           for (int i = 0; i < Elements; i++)
               writer.Write(buffer[i]);
           binWriteResult.end = DateTime.Now;
           binWriteResult.size = file.Length;
           Console.WriteLine("Φάση Α: Ολοκληρώθηκε");

           writer.Close();
           file.Close();
           
           #endregion

           #region Write text

           var file1 = File.Create(TextFile);
           var writer1 = new StreamWriter(file1);
           textWriteResult = new myResult { elements = Elements, size = -1, start = DateTime.Now };
           for (int i = 0; i < Elements; i++)
               writer1.Write("{0} ", buffer[i]);
           textWriteResult.end = DateTime.Now;
           textWriteResult.size = file1.Length;
           Console.WriteLine("Φάση B: Ολοκληρώθηκε");
           writer1.Close();
           file1.Close();
           buffer = null;
           #endregion
           int[] buffer1 = new int[Elements];
           #region Read bin
           var file2 = File.Open(BinFile, FileMode.Open);
           var reader = new BinaryReader(file2);
           binReadResult = new myResult { elements = Elements, size = Elements * 4, start = DateTime.Now };
           for (int i = 0; i < Elements; i++)
               buffer1[i] = reader.ReadInt32();
           binReadResult.end = DateTime.Now;
           binReadResult.size = file2.Length;
           Console.WriteLine("Φάση Γ: Ολοκληρώθηκε");
           buffer1 = null;
           reader.Close();
           file2.Close();

           #endregion
           int[] buffer2 = new int[Elements+1];
           #region Text read
           var file3 = File.Open(TextFile, FileMode.Open);
           textReadResult = new myResult { start = DateTime.Now, elements=Elements };
           int counter=0;
           while (file3.ReadInt_(out buffer2[counter]))
           {
               counter++;
           }
           textReadResult.end = DateTime.Now;
           textReadResult.size = file3.Length;
           file3.Close();
           buffer2 = null;
           Console.WriteLine("Φάση Δ: Ολοκληρώθηκε");
           #endregion

           File.Delete(BinFile);
           File.Delete(TextFile);
           Console.WriteLine("----------------------------- RESULT -------------------------");
           Console.WriteLine("Binary read\n\tStart:{0}\n\tEnd:{1}\n\tSize:{2} MBytes", binReadResult.start, binReadResult.end,MBytes( binReadResult.size));
           Console.WriteLine();
           Console.WriteLine("Binary write\n\tStart:{0}\n\tEnd:{1}\n\tSize:{2} MBytes", binWriteResult.start, binWriteResult.end,MBytes( binWriteResult.size));
           Console.WriteLine();
           Console.WriteLine("Text read\n\tStart:{0}\n\tEnd:{1}\n\tSize:{2} MBytes", textReadResult.start, textReadResult.end,MBytes( textReadResult.size));
           Console.WriteLine();
           Console.WriteLine("Text write\n\tStart:{0}\n\tEnd:{1}\n\tSize:{2} MBytes", textWriteResult.start, textWriteResult.end,MBytes( textWriteResult.size));
           Console.ReadKey();

       }
       static string MBytes(long value)
       {
           return (value / (1024 * 1024)).ToString();
       }
       
       class myResult
       {
           public DateTime start { get; set; }
           public DateTime end { get; set; }
           public int elements { get; set; }
           public long size { get; set; }
       }

   }
   static class Ex
   {
       public static bool ReadInt_(this Stream c, out int result)
       {
           byte[] buf = new byte[20];
           int b= 0;
         
           int count = 0;
           while ((b = c.ReadByte()) != 32)
           {
               if (b == -1)
               {
                   result = 0;
                   return false;
               }
               else
               {
                   buf[count] = (byte)b;
                   count++;
               }
           }

           result = int.Parse(Encoding.Default.GetString(buf));
           return true;
       }
   }
}

 

 

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...