Evgenios1 Δημοσ. 14 Ιουλίου 2009 Δημοσ. 14 Ιουλίου 2009 Γεια σας. Επειδη δεν βρικα κανα καλο test (binary vs text) στα ελληνικα, ειπα να κανω ενα . Το εν λογο νημα ειναι για τα 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 Το που θα χρησιμοποιησει καποιος 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; } } }
Προτεινόμενες αναρτήσεις
Αρχειοθετημένο
Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.