C# : Optimization

[".0s4*0|collections;datetime-format;optimization",["F@eBCDEV","MAOKMABEIAMA","OOBSTUUUUTTUUUUYHDHDFOBBBOOCWSTTUUUUTTUUUU","wf.",".NET","Array","Dictionary","List","String","2D","Async","Console","DataTable","Dates","DateTime","Enum","File","For","Foreach","Format","IEnumerable","If","IndexOf","Lambda","LINQ","Optimization","Parse","Path","Process","Property","Random","Regex","Replace","Sort","Split","Static","Substring","Switch","Tuple","While","ASCII Strings."," A string has two bytes representing each character. If the strings are only ASCII, you can change them to be stored as single bytes. This reduces the memory usage by one byte per letter. We change string representations to be smaller.","Example."," The concept behind this benchmark is simple. It allocates an array of 10,000 strings. The memory this requires is measured. Then another method (Compress) changes each string into a byte array. And the memory of this array is measured. ","Byte Array ","byte-array","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto","C# program that changes string representation","\n\nusing System;\nusing System.IO;\nusing System.Text;\n\nclass Program\n{\n static void Main()\n {\n long a = GC.GetTotalMemory(true);\n string[] array = Get();\n long b = GC.GetTotalMemory(true);\n\n array[0] = null;\n\n long c = GC.GetTotalMemory(true);\n byte[][] array2 = Compress(Get());\n long d = GC.GetTotalMemory(true);\n\n array2[0] = null;\n\n Console.WriteLine(a);\n Console.WriteLine(b);\n\n Console.WriteLine(c);\n Console.WriteLine(d);\n }\n\n static string[] ","Get","()\n {\n string[] output = new string[10000];\n for (int i = 0; i < 10000; i++)\n {\n output[i] = Path.GetRandomFileName();\n }\n return output;\n }\n\n static byte[][] ","Compress","(string[] array)\n {\n byte[][] output = new byte[array.Length][];\n for (int i = 0; i < array.Length; i++)\n {\n output[i] = ASCIIEncoding.ASCII.GetBytes(array[i]);\n }\n return output;\n }\n}\n\n","Output","\n\n39128\n479800\n39784\n320056","In this program,"," the string[] required about 480,000 bytes. The byte[][] (a jagged array of byte arrays) required 320,000 bytes. There was no data loss in these strings because the strings were ASCII-only. ","GC.Collect ","gc-collect","Jagged Arrays ","jagged-array","Convert String, Byte Array ","convert-string-byte-array","Converting back to strings."," You can convert the byte arrays back into strings by calling ASCIIEncoding.ASCII.GetString. Please note this will have a performance and memory cost to create new strings.","Discussion."," Is this useful? Probably not. However, if you have a program that stores a huge number of ASCII strings that are rarely needed, but must be stored in memory, this could be a useful optimization. ","However: ","There is an additional cost when you need to convert back into strings.","Summary."," We looked at an optimization that can compress ASCII strings to use only one byte per character instead of two bytes. In some cases, this alternate representation could save a significant amount of memory. ","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","3679700504","data-ad-format","link","br","ins","class","adsbygoogle","data-ad-client","ca-pub-4712093147740724","data-ad-slot","6227126509","data-ad-format","auto"],"url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANsAAAA8CAMAAADYHD9IAAAAMFBMVEX////mtsjahKfcpLruzNn69/nekrD08vLz2+XWVI7YZpfp6enadqDX19f45ezZwcpK10aDAAADsElEQVR4Xs2b23KrMAxFI8l3bv//t2eGkiic0h2Bo7T7NaOOV5G9ECG392YugdaEEOac46niUh61BZReT6hPmabpRKVw/S8jJ6FQDJBBxn1pYxYKOR8WpJSYh2G4nftUntlomrINLEurP4anabhYLIeV4B+PPt0tUXRROKRlgA0W+7OVfWPYmjJKhRHEFpMW+LLR2kMiQmv9Mk2GTZ0ee0SWMKybay4lECXmV2yRn4q3I2StZX432/ggEnNT0kYmx7uzFHRi8r34oDYWCkN+F1vWTiTdKTgZNx4Oaeuh9LNtQGkFylYLyB0tn0crG5rW+rHJ0zJHmwUivmo4CaB1s4Eisq05wAMVZ94UMdxc2XSd41pkXjR1XDbZRHNzYUPrtFkgwdbFaV/be/gE27ijMVlAa66eJIuWOrLlfRdiC2Cb2AUwaqknmxpgjVrAiS2p2tzZZC8qtYAT2zZrZCc2UGK0QL2437Qvbv5saoBT6kobWz7NVpzZgKmMFkiX/UYqbm+2vQHMFiBV/N9lm3eLNFugXJoC1J+ubMcGsFugrVa8YO/0Oba0M4DdAvSYTIe/yhbh8QLY4ljXME1DPs1GU/ZiAwYwW2CuW5pY8bSZF0c2cCaazRyqhkXWx0GGVGc2ZAD7LDCvxTvASQF/iw0ZYG8BmPj9+WlLuEH92YABbBZQOq7fkhaA584GDGC0gCbT9+f6DOi82YABLj0OmYMk2wNzfzZgAGwBDKgNqo3+cTZggL75LAbBV86fDRjAagF8eILpzpsNGABYwJrMFVSzMxswALCAOZFBS29HszcbHxgAWMCeGew4/zlADSAidBBWq1+IaPXvsIUKgy2AE37ecPQRNoFc1yxgPaW82RqAApLqWodOjK5sc30d7mX7/PNJZABsgX62uPkhOrFBA2AL9K9jVMF5sUWgC2B2W2bQ0JsfBic2MAPgWaDfAfp3ndhsd8MdFkDzX9YvqbzYGlh57yyA93JSwzmwAbuCxrKnQPEHvXAObNgA/RZIcC/HpjvOgQ0ZQMMXLUAV64Xqxu7Bhszcb4Hw8j6bFc6BTQ0AUtAa8SujuCdm8IphL5vFAPgsjZxIJIQh7wGCNMudaKh3umWIO+pCxK3n3VCwaqMFSn2EmdPXfJt4xbK0hM6OjZPQV/WjvIcNdJvRAqGCWDZpaU7vK1sMgO85CZE1y9kayYcNGMBogUIp1eOwGL9qzDQe1TeWpeN95bf+WEWYuW2rYlmKghnwAjHfkTgJhdD7u5V/XDaGjC0/qyQAAAAASUVORK5CYII=)","url(data:image/jpeg;base64,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANYAAAA3CAMAAABHJUQ7AAAAMFBMVEX////7/f7y/f+38v//6en/1dX/tbX/xcXl+v/U9//G9f//qKiq8P+U7P+e7v//lJQSDb6dAAAEaklEQVR4Xt2Z27KiMBBF050bN/X//3aQiBvZoeMZHoYz+8myKYtFeuWCDomfcY30n3EXTXh8xtnp7p+5KlbcYYXGYE1rCpZeFCvtsBpdOPiSFe6qXfjYJTWwlgBt+AVqteXSfgnQ/MXVSl/Jpd2Svu/6oUQvrVZ24zdy6RrXlUHrr4mFMcosV2Pc+jnXxArAioZcRj/qldUaPwjtSEzPi0RnMFWpFrcJIea0qpvyZ1GEfn77laieU8tZcm2IQ17ZRVXFKurzi1VZZAzLWEu56G13XN0VPO3ktNvZ628lvUP6W4mHWkBhuRgrJDA4ETGLQusHCERFSgvDafwknvaMNXRbrAEIhDqwWo7lYiw8+tAsLsyMheF8Um3Jq90hM5ZXh3QvhLtDbq90rJYpV+3G7KKNlYo2i5nCToO0YA0OkZVBifRWUYvkOoFFHVoFL/bBbzgNtQrWpIZctlok11ksfWGllOKcMCfDrtdw7SBKALpiddX5gUFZLVMuaqK43LlRLB22T6xgQS5Wa8XqDbkMtYjSwsrhxaNyUFzXNEcZ0fUL+o6C1HK6YEGuDYU21aKeJCwwoaAq9aKUHQgNF83m1HN0UcHy1so12GoBMx1hZdnte7mI/WLXMRY8qn9JU9dCBayaXJOhli1XvTu103pxhlqwXBurIpeQWndgcdMJmpLVYs42lhxhPY8sNSzMhcn4eVILWDRF0BRCallyHeCWNuPi8AywQsRed4dFcrFaHlgkV0stksvAkjaW908sLVv68cFJhnGkFrBYLlstastjLEFBD7A8sIzdU02uulo7LIVchlqP9M5IpIyl2j3dKfaohSVExVgsV9gYr1Usd3/LBbUmqHWcaGAtFs/xQ3+ANc1Y5XXA2MJiufLGeJ2pgFWRC2oNEOY4+RjrSdXCWmtxA7LsC2HRoVxQq2BNwCK5DLU4LBe1+3T/Civtl2rCIrnkozOKWpjlSK6KWlZCC+tuN2FRawQFY9XlglqMxXKxWtnEiuexeAlhLJZrq5bTwQOrJtdeLdg8pm1ILsIqE6EvC66FxSXG4pVlhKkL1gQslmt6q9XZG6XMcrE+iJzDYrneH2TFmqlWLJbr/UH2agk9NiI4jZVbWLDw47F2dSzMf/5IrfHgsUULCzFmQlmVQS0kPiOw6VCr9wXr7hBsBBFWKxvn13NYur3ZGGJODyRL+0/RdXJ63raQXIipFst1HiuaSwjLhQh2TrhxlqupFst1AgsLl43FcsE9wiK5EG+oRXKdwPpiuIIhF3ZOwLLk6ltqASH/Pdb9NVzmoh8suXAoYSyWC8X0CtuSUwmwrKudVIoz07C+ognb7hpzCKmOJTgY4bzfa+dvVSzxc96d6P5BQiyPKYZCEmLkR8TLmqis/8L7OeoQ3slfO5m8NjNArSuHNbVzx6HkwuG38XYUr9IuHajF+cVqpZ+p5f9PtW7/pVrdL1EL5/2vgvP+tTP+TK3pd6gVfqaWXlwtfk1jhl/TXDsxlcQvsXxJ75A/ZMHNEnLfXgIAAAAASUVORK5CYII=)"]

["url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACCAgMAAADasxWRAAAADFBMVEX/6Nn///+VlZX29va5ksB5AAAASElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOSAALWyrsxEHLDAAAAAElFTkSuQmCC)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAAA9CAMAAAAzrLMQAAAAMFBMVEX////i4uK+vr7Z2dn7+/vDw8PMzMzz8/Pm5ubHx8fr6+vR0dH39/fV1dXe3t7v7+8OWlUtAAABXklEQVR4Xu3YzW7EIAwEYGz+SXb7/m9bteoBVnTq045VMddYn5xEEJzwEpGn/kREgilcQ4q+pEgCMt9IUbeJN+DJRtNfI3udbqRLQQp4UDzj7gqTawBhGLgWd80zUtc/08HbpRgPNaSEfUjGWOUu45toYlr/JKMvpWNilvKcwjYUo83qY3VqNjwmhnGttWvqBPWwD8FImJSJqmEbgjEm8QNbLezzdmO+hWuHFcPaf7sRMThfj2EfiiFf6aoJ7PioabKBX8sTlLkyqmGTdWdEw3blzWiWD4Mzo1kmJkeG/bDDNfD5dgCVZ+AZMwLVjVG7beigGniMKAm4Xgyx1hKMf9zzBVg3xlDbevVk3Nk49vMN/98UlA/b/zdfRjT9fXNm5On+QK0ro1pO296MZthj3BliWLBcA6+hBEyegYszIJ0Z0TJA8o3TNN/wn5OTs3tQjdP0afo0fZo+TZ+mT9Of4mQgBSW24WQAAAAASUVORK5CYII=)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAANMAAAA8CAMAAADLy3+8AAAAMFBMVEX///9/frjX1+inp81WUaW6udfGx97q6fIbDJDr+PfE7Onc9PLN7+zT8e/0+vu56eUR9HoqAAAEp0lEQVR4XryXzQ7DIAyDfc0fe/+3XTeph4YGI5D4jiSo2HMQA+TzRNDhzw7FD30uOjr6JsMf+czj4PATI1GozqsNYDsVpzS1fGQiOuplslOOaUIkN4nmVrhN3XKc04ScraFkq0JrzKx2UpMla0Zma10hXhlOaoIOJipSjZRqq3BWkwy8SSUyL7VTdlgTvHTcipngRUnJXNMkWCU7TmaiqMbAJ1nTZFgnjwabCV5uyaUlTYoNWuG4FmbTmYGNYlnBHiccPhpSu8YadCVCvpU84njwn2ncIao5lBwjydu8z1u/Fnyb48b1B/GbvsJ28V5A8E/AX3uaX6gq8Zv8M9lG+jts5hPy2iRxcYuS1SfaPpEl2FS4463LLv6i5g8n28PE45yyIFPbvqyX65brIAiFQckFCfb93/aUkIacrprRzuwfNWp15RPc0cLWMiGtK2EuO1QdzLzyVFdwx4PP3JkJekEqCpBoPfSw7JOBLCmuzlHjfl6014P+Y6rLiUSWfL2ZV1ybS+GvxN+duySYNmU0minNGbNuW2HoUd0OIlUxVfgzbS0muNWVSSxCFaAyi3YvuOh2EjHzONJ4oLjLhYNpAYMypgpgDQBR+uO04Eq5Qs30LNX4ffC0ZLr0vPCWbAmAE8QUqSLtM+49r4fcMuZBXy0XJtpzz5lUoMWUyep0GAqKqAXp7IgecFkt6jGFVabrsqWGMY9ezPjCNPkrYWIRhQbTKTrKSUy8fuhxBlwJ0erzyUTnjOTtyRrv/Dyk3RuxlE0EVxeK8A0TJdyLeTYu5JOJJmuJHmeYk/1E3bnRa9navciNNBo/S/LJpMIzORQJ3DAtsBypkqw0JuZrS3pf+JSz1YMJz83m7WjTdtmEDDimMQnX2WOV75jeepiFnenzGHMM13VZXE6TwKPVE6guY63XQJmVGxWNMJlqk6k6UTDF08slskV16rPzrf9sE0zgrzfE1IhT7JgELSZzCbL/1M7PLncHyo4CSbjWM8XDYNOvmMjft8mU3QfxLkzjx345woQrTinlsCwMD/vAVJ9yJpEGU7jK3GRa1l3z7W4av3EeTJH4tJy57rplkqeaTL4wuDaZYO+j++PouE3IzvQIpAQu8mr+yPTKODG1PSL5HNRi8hDmlnsNfnVDvp/m7GsaDnQc3KYPTM6yl6rK0GSChGYSYQPvTHVtOIQ+GuKB5FMx9YxgET319aUpcg+H7k+llynuQB1WqbqFylbhay2GRPUng9DhQL3cfFcHk4FcxPC1cpx278Kkb3urh8mhXAo/SQInBgwrrBX/NWsGKRCEMBAElmWJ0fj/3y7McZQapCeQ/KCwCZjqR69r99vYgRcGppzb1+/6si2znvPidJ8fCb4A4Xo+n2886xpfLEN/l6mBj0u6r2zSYQKTrjB0r+EbzCYzcXlGH85CbDinC0ypCoOzwJ2ikJjyk4cGPUjz6kzn2lb3NB19vM50QxoG85amMeoU6UxjJpc+YMFBK0xh8pnCxPk2WLo6U8wUJt6sjYIyZKaWw8RhMBb8KtNMY8J40UP1uky0BhjZKjNBV5eYW1Um7i1xNr0yE3TfUR5GdaatP+OH6rWZ/usREj10r/sZAAAAAElFTkSuQmCC)"]