TheDeveloperBlog.com

Home | Contact Us

C-Sharp | Java | Python | Swift | GO | WPF | Ruby | Scala | F# | JavaScript | SQL | PHP | Angular | HTML

<< Back to C-SHARP

C# Byte Array: Memory Usage, Read All Bytes

Create, test, and measure byte arrays. Byte arrays are similar to other kinds of arrays.
Byte array. With byte arrays, we can store binary data. This data may be part of a data file, image file, compressed file or downloaded server response.ByteArray
With byte arrays, we have an ideal representation of this data. The byte array type allows us to store low-level representations. It is useful in optimization.Optimization
First example. Here we allocate a byte array on the managed heap. The program measures the memory usage of the managed heap before and after this allocation occurs.

Memory: The GC.GetTotalMemory method gathers the memory usage figures from the system before and after the allocation of the byte array.

GC.Collect

Then: The byte array variable is assigned a reference to 3 million bytes in an array allocated on the managed heap.

Result: Allocating a 3 million element array of bytes causes 3 million bytes to be added to the memory usage of the program.

ValueType

Tip: Here we find that a byte array is a precise representation of bytes, not a higher-level construct.

C# program that allocates byte array using System; class Program { static void Main() { byte[] array1 = null; // // Allocate three million bytes and measure memory usage. // long bytes1 = GC.GetTotalMemory(false); array1 = new byte[1000 * 1000 * 3]; array1[0] = 0; long bytes2 = GC.GetTotalMemory(false); Console.WriteLine(bytes2 - bytes1); } } Output 3000032
Read bytes. We read in a byte array from a file with the System.IO namespace. An easy way to read a file into a binary array is the File.ReadAllBytes method in the File class.File.ReadAllBytes
C# program that uses File.ReadAllBytes using System; using System.IO; class Program { static void Main() { byte[] array = File.ReadAllBytes("C:\\profiles\\file.bin"); Console.WriteLine(array[0]); Console.WriteLine(array[1]); Console.WriteLine(array[2]); } } Output 56 66 80
ToBase64String. When we have a byte array, we do not just need to leave the data as a byte array. We can convert it to a string with ToBase64String.

Here: We load a JPG image on the disk into a byte array, and then encode it as a string. This can be put in CSS or HTML files directly.

ToBase64StringStrings
C# program that uses ToBase64String using System; using System.IO; class Program { static void Main() { byte[] data = File.ReadAllBytes(@"C:\Codex\i\2d-adventurers-map-background.jpg"); // Get base 64. string result = Convert.ToBase64String(data); // Write first 20 chars. Console.WriteLine("BASE64: " + result.Substring(0, 20) + "..."); } } Output BASE64: /9j/2wCEAAgGBgYGBggG...
Test byte array. A GZIP file must have certain bytes in its first few bytes. We use IsGZipHeader to test a byte array to see if it contains GZIP data.

Note: The first part of Main reads in a GZIP file, "2About.gz". The result value from IsGZipHeader on this file is true.

GZipTool: This class is a public static class, which means you can access it from other namespaces and files. It contains IsGZipHeader.

IsGZipHeader: This method returns true if the byte data passed to it contains the values 31 and 139 in its first two bytes.

C# program that tests gzip files using System; using System.IO; class Program { static void Main() { byte[] gzip = File.ReadAllBytes("2About.gz"); Console.WriteLine(GZipTool.IsGZipHeader(gzip)); byte[] text = File.ReadAllBytes("Program.cs"); Console.WriteLine(GZipTool.IsGZipHeader(text)); } } /// <summary> /// GZIP utility methods. /// </summary> public static class GZipTool { /// <summary> /// Checks the first two bytes in a GZIP file, which must be 31 and 139. /// </summary> public static bool IsGZipHeader(byte[] arr) { return arr.Length >= 2 && arr[0] == 31 && arr[1] == 139; } } Output True False
Seek, read. We use Seek() on some Stream classes to read a part of a file into a byte array. It is faster to read in an entire byte array at once. This uses the file system's buffering.Seek
BinaryWrite. ASP.NET uses byte arrays in its internal code. We can use the BinaryWrite method and provide a byte array parameter to achieve a fast write to the HTTP response.Response.BinaryWrite
WebClient. We can download data over the Internet (or other net work) with a network connection with WebClient. We directly access the bytes of any server's response.WebClient
GZipStream. This allows us to use a byte array buffer for expanding or compressing GZIP-encoded data. This is an easy way to implement compression or decompression for web applications.GZipStream
File system caching. With byte arrays, you are usually just storing the exact data from the file system in the memory of your program.

However: In some cases, this actually duplicates the Windows file system cache mechanism that is optimized for this exact purpose.

Note: Byte array caches on the file system can improve or degrade performance in various situations.

BinaryReader. This class allows us to imperatively read in a binary file with more helper methods than testing the bytes yourself.BinaryReader
A review. We looked at the byte array type, seeing its memory allocation statistics. Next we provided pointers to further information on the byte array type.
© TheDeveloperBlog.com
The Dev Codes

Related Links:


Related Links

Adjectives Ado Ai Android Angular Antonyms Apache Articles Asp Autocad Automata Aws Azure Basic Binary Bitcoin Blockchain C Cassandra Change Coa Computer Control Cpp Create Creating C-Sharp Cyber Daa Data Dbms Deletion Devops Difference Discrete Es6 Ethical Examples Features Firebase Flutter Fs Git Go Hbase History Hive Hiveql How Html Idioms Insertion Installing Ios Java Joomla Js Kafka Kali Laravel Logical Machine Matlab Matrix Mongodb Mysql One Opencv Oracle Ordering Os Pandas Php Pig Pl Postgresql Powershell Prepositions Program Python React Ruby Scala Selecting Selenium Sentence Seo Sharepoint Software Spellings Spotting Spring Sql Sqlite Sqoop Svn Swift Synonyms Talend Testng Types Uml Unity Vbnet Verbal Webdriver What Wpf