C# : Optimization
Top 36 C# Example Pages...

[["a#+CCCSTUUUUTTUUUUY4777F74F741CBCEE(BXSTTUUUUTTUUUU","ssswtldd.","Benchmark."," If we have a solid knowledge of how fast code executes, we can develop more efficient programs. This opens new possibilities.","Benchmarking, notes."," With benchmarking, we can make smarter decisions. Most of the programs we use every day have been benchmarked many times.","Example."," First we see some benchmark loops. This program is what I use for my experiments. Change \"_max\" depending on the code of each iteration. Start smaller and push the limit up. ","Note: ","Use the two loops here to time code. The two stopwatches are set up to print out the time.","Note 2: ","Run in a new C# console application. Adjust _max higher or lower based on how slow your iterations are.","Note 3: ","Always run in Release mode, never in VS\u2014click the .exe yourself. Change the order of the tests.","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","Benchmarking Console application, 2 loops: C#","\n\nusing System;\nusing System.Diagnostics;\nusing System.Runtime.CompilerServices;\n\nclass Program\n{\n const int _max = ","1000000",";\n static void ","Main","()\n {\n var s1 = Stopwatch.StartNew();\n for (int i = 0; i < _max; i++)\n {\n }\n s1.Stop();\n var s2 = Stopwatch.StartNew();\n for (int i = 0; i < _max; i++)\n {\n }\n s2.Stop();\n Console.WriteLine(((double)(s1.Elapsed.TotalMilliseconds * 1000000) /\n _max).ToString(\"0.00 ns\"));\n Console.WriteLine(((double)(s2.Elapsed.TotalMilliseconds * 1000000) /\n _max).ToString(\"0.00 ns\"));\n Console.Read();\n }\n\n static int _temp1;\n static int _temp2;\n\n [MethodImpl(MethodImplOptions.NoInlining)]\n static void ","Method1","()\n {\n }\n\n [MethodImpl(MethodImplOptions.NoInlining)]\n static void ","Method2","()\n {\n }\n}\n\n","Benchmarking Console application, 3 loops: C#","\n\nusing System;\nusing System.Diagnostics;\n\nclass Program\n{\n static void ","Main","()\n {\n const int m = ","1000000",";\n Stopwatch s1 = Stopwatch.StartNew();\n for (int i = 0; i < m; i++)\n {\n }\n s1.Stop();\n Stopwatch s2 = Stopwatch.StartNew();\n for (int i = 0; i < m; i++)\n {\n }\n s2.Stop();\n Stopwatch s3 = Stopwatch.StartNew();\n for (int i = 0; i < m; i++)\n {\n }\n s3.Stop();\n Console.WriteLine(\"{0},{1},{2}\",\n s1.ElapsedMilliseconds,\n s2.ElapsedMilliseconds,\n s3.ElapsedMilliseconds);\n Console.Read();\n }\n}\n\n","Benchmarking aspx file: ASP.NET and C#","\n\nusing System;\nusing System.Diagnostics;\nusing System.Web.UI;\n\npublic partial class _Default : Page\n{\n protected void ","Page_Load","(object sender, EventArgs e)\n {\n const int m = ","1000000",";\n Stopwatch s1 = Stopwatch.StartNew();\n for (int i = 0; i < m; i++)\n {\n }\n s1.Stop();\n Stopwatch s2 = Stopwatch.StartNew();\n for (int i = 0; i < m; i++)\n {\n }\n s2.Stop();\n Response.Write(\"Loop 1: \");\n Response.Write(s1.ElapsedMilliseconds);\n Response.Write(\"<br/>\" +\n \"Loop 2: \");\n Response.Write(s2.ElapsedMilliseconds);\n }\n}","Some problems."," The benchmarking code has some problems. The second block sometimes takes less time to execute due to unknown causes. ","Tip: ","Repeat and swap two loops if you are doubtful. The first program shown converts the results to nanoseconds.","For ","for","Tip: ","It is usually best to report results in nanoseconds or microseconds with the number of iterations used to divide the result.","Convert Nanoseconds ","convert-nanoseconds","Stopwatch ","stopwatch","An example optimization."," The Dictionary collection in the base class library is a huge optimization. But developers sometimes write code that results in twice as many lookups. ","TryGetValue ","trygetvalue","Summary."," Benchmarking encourages careful thinking about your code. It saves nanoseconds from your software. It also improves the depth of your understanding. ","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,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)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIcAAACHCAAAAAAZjBXWAAABpklEQVR4Xu3bwY2sQAxF0ZuT03FizskxOIhKwP8jNCq1QJrNiNc947tkddSL0oMG+ijcwPso2D1wxTz66HCUASIHYHU6EqQOyMNRAJ6rFa10gGrawLJ1pYE1yyFbWQJF98rWFrGafove1TEOM2t1EQHQ6oAfcoxjHOMYxziqqtW5++yPv+GYPbYyjkq7xyo4w0O4P4IdXipH8JKVxhFwgQgcxSVXOJxr+bxjcZM/70juWo87grvyTRzx4b9HVQkcP7nHirvW8/vDueaC/ZFcS4Gj48JwzR5zXrMl2mPBDnzJ9lgaX1lI7ysz3Mw88u3ub8cxjoz7nnYE9/0yxziqSuvYe0zn2I1jHN/tMbkjIj79HMuIcKljl3rHOMYxjnFAVWkde4/pHLtxjOO7PSZ3RMTsj7/jGMc4VmYG1/J/JX0etDO94/MdVaV17D2mc+zGMY7v9pjcERGfdI6NY/4nHMc4xjHv88/76+OY7yvnPB3HOFZrWwAG2doSDAdvbQ5OQrQ2g6Q9W9xya/osl4ZQp+TLkexOAI9cwV73h6sc5KvDRA6LE/APOHkbCvNB8rkAAAAASUVORK5CYII=)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAIwAAAB4BAMAAADS7QcCAAAAGFBMVEX///95cvSaspm/zr6ppPiuqvilofiMhfa6xS0cAAAAfUlEQVR42u3XsQmAMBgF4V9xAAOCfVxAdAEdQtwg1il0fsHS8IpIsLob4OvPnKy1V7WXWR9ER8oMs8hbZ6ImZUYTTTAwMDAwMDAwMDAwMDAfmX4T7Tl3V+o1iYieKifLYs5NFLOYxUQrDAwMDAwMDAwMDAwMzA/MFUSx0GveDtlxrtujxRkAAAAASUVORK5CYII=)"]

["url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAALQAAACsCAMAAADllnb2AAAAYFBMVEX////6lbiX3axHPiH97gb7q161sqeYPl3/8vyEj4Td4Ui83XZvzfH8x7VmbFX8eob7/rLW5sn+5NiekecRAw/8xzb/3/vw8/T9/87/yPnD6/iV2/D+/um0pwjKyMj/svb+8CRAAAAJSUlEQVR4XtSZ2XLqOhBFkTzPEzMk+f+/vGobsUFSxaJj17neL3ldrFp2k2T3v979vtvezucNQrftBkW37eb6uLdte96eaLUNikYf2xG9oT5OEK22EeYTRG+mj+sNojfTx60k1e1z921AXyF6I6qvZalUt9uCvinoK92VDfVxKtVuIN6E6itBy+6NehN1lFK2W+kDouW76vMmRKut1MeRlqot/RhKWrdKH+nPY5dpx3HpuL/WQVulj8uPPfNzfPxBbprZUL1UHC7Yzz7HL6JpK/QBHPbsriDaUH1eXTR/g1o8zlS94FNorxFC/Ak6xr6rcehjpadQNDShxheNgbk9ryEazJig8UQDuscpX0k0gBnsEP1KvdgpP86LdrP7igZ0vxj0LDMPHsygXuyUHxnMHs1ANNYtdcrTmaC57GDG5FLQlxnRTHiXaCm7ZfpIF2XGhqFwQPuo5ov+K7MY4tykNr6BrPQU8hfFeRjmJjNtiT4uKzBHh5Dmhi7yHH0sKvovwBOxSiMMHcyyOEzL87xf/inkAx+ihg5LTuSYBPVj/b+OI4o0cDQ9hnFcvPUhLej2vKRobsQHpXgaiTb6kM/lD+a2XVA0C5iawIa4yHNAgxmqc+Z9OXLjsJswzOckXkWdm8xQzb0vlz8xI2LX06iwi8KChmqc8iVEMyI2gQ90C4tQ9wFmqM6ZpzzlxRGZEdupTKBjH4UTuuDdF34ch1+ByfwETcQ6ammOe8pTXhxEffg9FaGh89iAtqnP64oGJKDd77v4sWfUcinoI/8UhqEZMQZoRO2C7lh9XDhx6D4iI2InMxHTJQczXzVfNKCNiN3Q+qUnnes+h055zIAGsLlI4aKPMCyke+iDEQfjFIahiWyLRtRyIdUpJ2hMiW7mRCNqOaN6bdHoY1Y0opYzqj37OHKZ0YeP6JiI0Yc13cedLXqWtEoRPaJ2QHv30cH0SqKFEtCL2ahjD2hQ+9/ElBVHv6NVc1EPsRG1RNRu6jXj0J+4+jXq4R1azkS9suh0p9cLRD0LbfZh18G+K8JTNLAP7qiNP5VKqYgL9MEWfeTEIYzbVKEPQ7QFHUpccr5ozinsrcZau4+kEe/QRIaoXdD8153wF421Vh9JkAzjXpl/i5rzFILZ+ynEUuuSJ/v9vrGh8dJjiebHUdkCdNTQvFdLxj6yDMyyQB//XLRxyRNC1qqTGtAUdeGGZogGM6do8bzkQCbZgRgUf5KBGVFbdfBfdw2njv7tko9lBAqeyMl5kAAaUS8pmlOH0Jccml8iCQIVCOgQ9UKiRcOpo9JfT6EZ/EE2KNUZ8NAHR3TKisOuI8UfmqAZzochCYIAeO5L7iv6wmJuerdo6uNNMzmnDcOgoGtAj5fcroN5V0TDqSPFry+m5qShPoYhU9SZEfViojl1pPqjBmFYv2kOkom9HsoagSBqhuijzcyqQzzNfoVf75ppRD+UJQJxRs2+K6Lh1FHBbB2G0Jw8+MdAyhKBOL+ecu+KaDh1VK8ncLzk0AzrWTkFgqiLN+iO+7prOHVUeE8k4yU3kHUgZSkRCKKG6DXiwN6ZcUKS6ZLbzE00BiIRiIKm8UWDmVFHjzLwptbIgK7HQGQ9qi7yCTkv/i66YdTRm1c7IdMWcxSNgUgZ1F8PYPMxvK/xFGJvR8W62ofwC7SApkDq4gGck+o36s5TNJe5ET2OiqFZkX2FoYs5+vr6Cmnqp46jYIhmxQFsYoZmnBMLOooOhwcvKQbwp6JTFjNWpXQIoRlXG79zGf+gOzxV19JcxxItPBVXVSX0hYltzfrrqUWsXefF9AYxxhItfPXi742NpTl5vvQAPPJq8lrVrwj1Ncc61l3xY3590blqxl/XDcOEHkVRTNdcjifGUzQ/DjCD2qUZ0BoYxLRql42qEQhLNP+L/7elGTsQJuKI9NT5CPaEGyMQf+gjOw6sdiLrqJ//II+wfvqsgR0I6ynkQH9bzBj+Qf4CPdVV7wMrkCsnDtZvK72FjEVKMW4h4qAFI272GsiJIdr3nFjQSTKdE2skGdCIgxbvR9wagdwYor1PtwENze6ZcejVAQLxruNox8Hp4xuaPZgjAFyNQPxEM5mb+A06mdFsxoHFAQLhifZnDvbZDouh2TMOqH7gTsZLj8cw5cUxBZyluC2keWbvzJh8DeS2Xhz6alcjdpdBs38cUJ0hkPL6sWh/zSg4ywLSPD+TGZMvgZzWEe3+DsqNg9Y9A9nv4/mnkMHs/A76CfTdwrjri6igg9Nnor2QA2BCMzcOqJ5uS6kU1AzR/ppxtZlxYOep57LMFPW3x1Poz5wAeaKGc39oJ8m9mwIpTxSIv2jhodksOAE0Nw6orhXvbfxlIvMVLWah4ZZBjTjcO3cqkBEXgfj+w1Bt/qi8wsA8Jw7s3irVEy4CmYnDn12/oaE68IVGHG7V5YiLQDxEu9n9AuEzA7q9leX+GUg3L9qf3R0IO2jsfr6WtwyBzD2F/uzMQHAKf9upvO5mAkEcn7KbgQRQzYoD1CeNWyMQQzR7pIO8+54YxDEDvdM948QYovkTirJGMwiEGwemcWPFHluij2qXaZ/z0wtVwLygQMQcdL/z2veEi0DcS2lHGj6HRyA/2PD4EILGigPTuEpETb14L537HBRI9oPRNTduEyMOBFLv4oAaRCEY94NcLtnoFgtAbbB/EgcCUcjE/L1bdBRIirDGD+Hq6tj3VaXi+K+dM1Z1IISCqCAIW6TwIbHz/z8zELuzRYLXAwbeLbeQ3eEwztxAEuYTIK3lkvYO/H+SmPudq+c7DP09vhd6uh6A3jQMCPXWkxb/BKu+yWiX8c7wf8TgmBYot7sBKaA8fOaUeTfNNFRQHjxRopmGuhGQ0SCzMmUHIJQZTx1A+h5AyvTmkfTp7Q5IXToIMvuAwAbXZcb3moBkArLi+ATLB4SUnykzfQ42eKjM8LkOyoO3tj81AEiNyBwHBJQbMvuACOFI7wOtC+FIAASUCzILgDBIBcORPxWAgHJOCRRXtzBeRjjyC6OQQT0HIeWUGSwdBogRjnxAhFvb3ygY4cjfKBgy+xsFT2a/MFYhHIkbBWEP6hfGKoQjHxAhg/obBWNB5wOCR4cCMhD1hXBkFEYrg/p9oGQh6ruFccqcxyWwYQEy8glBY+UHVyE2m4AIMutxT5HZB6Skn5sy0pz/eQEivnC1LJWQEQAAAABJRU5ErkJggg==)","url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAG4AAACCAgMAAADasxWRAAAADFBMVEX/6Nn///+VlZX29va5ksB5AAAASElEQVR4AWPACZj/f0DmjkqOSjKtQgcLyJccZiEE9SOmP8mXHEaBMBoIo4EwGggryJccvvVKKAogTnJUclRyVHLklgmjkqOSAALWyrsxEHLDAAAAAElFTkSuQmCC)","url(data:image/jpeg;base64,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)"]