{"id":27039,"date":"2020-11-16T21:00:25","date_gmt":"2020-11-16T21:00:25","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/cppblog\/?p=27039"},"modified":"2023-02-02T19:09:31","modified_gmt":"2023-02-02T19:09:31","slug":"the-coalition-sees-27-9x-iteration-build-improvement-with-visual-studio-2019","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/cppblog\/the-coalition-sees-27-9x-iteration-build-improvement-with-visual-studio-2019\/","title":{"rendered":"The Coalition Sees 27.9X Iteration Build Improvement with Visual Studio 2019"},"content":{"rendered":"<p><span data-contrast=\"auto\">Visual Studio 2019\u00a0<\/span><span data-contrast=\"auto\">v16.8 Preview 3.<\/span><span data-contrast=\"auto\">2<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">introduces\u00a0<\/span><span data-contrast=\"auto\">significant build and link time improvements.\u00a0<\/span><span data-contrast=\"auto\">In this blog post,\u00a0<\/span><span data-contrast=\"auto\">we\u00a0<\/span><span data-contrast=\"auto\">detail how\u00a0<\/span><span data-contrast=\"auto\">the team in The Coalition building\u00a0<\/span><span data-contrast=\"auto\">Gears 5<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">tested\u00a0<\/span><span data-contrast=\"auto\">the\u00a0<\/span><span data-contrast=\"auto\">compile and link times in\u00a0<\/span><span data-contrast=\"auto\">three\u00a0<\/span><span data-contrast=\"auto\">different versions of Visual Studio<\/span><span data-contrast=\"auto\">.<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">The experiment was conducted to<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">measure\u00a0<\/span><span data-contrast=\"auto\">not only\u00a0<\/span><span data-contrast=\"auto\">overall<\/span><span data-contrast=\"auto\">\u00a0end-to-end time<\/span><span data-contrast=\"auto\">\u00a0improvement<\/span><span data-contrast=\"auto\">s<\/span><span data-contrast=\"auto\">\u00a0but also\u00a0<\/span><span data-contrast=\"auto\">link time improvements in the preview compared to the current release.\u00a0<\/span><span data-contrast=\"auto\">Using<\/span><span data-contrast=\"auto\">\u00a0Visual Studio 2019<\/span><span data-contrast=\"auto\">,<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">the team saw\u00a0<\/span><b><span data-contrast=\"auto\">2.67x faster<\/span><\/b><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">e<\/span><span data-contrast=\"auto\">nd<\/span><span data-contrast=\"auto\">-to-end<\/span><span data-contrast=\"auto\">\u00a0build times<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">and<\/span><span data-contrast=\"auto\">\u00a0<\/span><b><span data-contrast=\"auto\">27.9x faster<\/span><\/b><span data-contrast=\"auto\">\u00a0link times\u00a0<\/span><span data-contrast=\"auto\">compared to<\/span><span data-contrast=\"auto\">\u00a0<\/span><span data-contrast=\"auto\">Visual Studio 2017.<\/span><span data-ccp-props=\"{&quot;201341983&quot;:0,&quot;335559739&quot;:160,&quot;335559740&quot;:259}\">\u00a0<\/span><\/p>\n<p style=\"text-align: left;\"><em><strong>\u201cThe improvements are massive and will greatly improve our iteration times<\/strong><\/em><span data-contrast=\"auto\"><em><strong>\u201d<\/strong><\/em>\u00a0<\/span><span data-contrast=\"auto\">\u2013<\/span><span data-contrast=\"auto\">Aurel Cordonnier<\/span><span data-contrast=\"auto\">\u00a0from The Coalition<\/span><\/p>\n<p>&nbsp;<\/p>\n<h2>Background<\/h2>\n<p>Compile times are a consistent theme of feedback from Visual Studio developers. Recently, we launched numerous build optimization efforts. One of which is working closely with our colleagues across Xbox Game Studios. Here, we seek to identify opportunities to improve our Visual Studio developer experience. The following details the build and link time improvements The Coalition saw when using Visual Studio 2019 v16.8 Preview 3.2.<\/p>\n<p>&nbsp;<\/p>\n<h2>Building Gears 5<\/h2>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/Gears5_2020_Optimized_1920x1080_Clean.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-27044\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/Gears5_2020_Optimized_1920x1080_Clean.jpg\" alt=\"Image Gears5 2020 Optimized 1920x1080 Clean\" width=\"1440\" height=\"810\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/Gears5_2020_Optimized_1920x1080_Clean.jpg 1440w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/Gears5_2020_Optimized_1920x1080_Clean-300x169.jpg 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/Gears5_2020_Optimized_1920x1080_Clean-1024x576.jpg 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/Gears5_2020_Optimized_1920x1080_Clean-768x432.jpg 768w\" sizes=\"(max-width: 1440px) 100vw, 1440px\" \/><\/a><\/p>\n<h2><\/h2>\n<h2>Methodology<\/h2>\n<p>The Gears 5 team compiled and linked the PC version of the game, using three different build configurations sequentially. The configs compile and link a very large code base into one monolithic executable. To produce consistent results, the team chose not to use \/debug:fastlink with the build machines since the machines need to publish symbols.<\/p>\n<p>To measure link times, the wall clock execution time of this compilation experiment starts before link is called and ends after linking the final executable. Similarly, the end-to-end times were read from the build system output (total execution time). Then, the link time from linker\u2019s verbose output were subtracted from the total execution time to get the compile times. \u00a0The results are an average of five tests conducted for each configuration to achieve consistency with a low variance.<\/p>\n<p>&nbsp;<\/p>\n<h2>Results<\/h2>\n<p>The results of the experiment showed both compile and link times significantly improved in Visual Studio 2019. The compilation time for all three configurations has been improved by a factor of <strong>2.15<\/strong>. In the ship configuration, Gears 5 took 41 minutes (2461.92 seconds) to compile in Visual Studio 2017. In comparison, the compilation took only 18.76 minutes (1125.61 seconds) in Visual Studio 2019 16.8 Preview 3.2. On average, the link times improved <strong>27.9X<\/strong>. The ship config took only 29.57 seconds compared to 11.28 minutes (677.07 seconds) previously. Overall, the end-to-end compilation time decreased by a factor of <strong>2.67X<\/strong>.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_linktimes.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-27041\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_linktimes.png\" alt=\"Image gears5 linktimes\" width=\"2337\" height=\"1273\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_linktimes.png 2337w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_linktimes-300x163.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_linktimes-1024x558.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_linktimes-768x418.png 768w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_linktimes-1536x837.png 1536w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_linktimes-2048x1116.png 2048w\" sizes=\"(max-width: 2337px) 100vw, 2337px\" \/><\/a><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_end2endtimes.png\"><img decoding=\"async\" class=\"size-full wp-image-27040 aligncenter\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_end2endtimes.png\" alt=\"Image gears5 end2endtimes\" width=\"2333\" height=\"996\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_end2endtimes.png 2333w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_end2endtimes-300x128.png 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_end2endtimes-1024x437.png 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_end2endtimes-768x328.png 768w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_end2endtimes-1536x656.png 1536w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/gears5_end2endtimes-2048x874.png 2048w\" sizes=\"(max-width: 2333px) 100vw, 2333px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr style=\"mso-yfti-irow: 0; mso-yfti-firstrow: yes; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\"><strong>Compile Time (seconds)<\/strong><\/td>\n<td style=\"width: 16.8755%;\" width=\"73\"><strong>dev<\/strong><\/td>\n<td style=\"width: 21.3033%;\" width=\"96\"><strong>test<\/strong><\/td>\n<td style=\"width: 21.3868%;\" width=\"96\"><strong>ship<\/strong><\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 1; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\">15.9<\/td>\n<td style=\"width: 16.8755%;\" width=\"73\">2779.80<\/td>\n<td style=\"width: 21.3033%;\" width=\"96\">2605.97<\/td>\n<td style=\"width: 21.3868%;\" width=\"96\">2461.92<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 2; height: 15.0pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\">16.7.5<\/td>\n<td style=\"width: 16.8755%;\" width=\"73\">1321.47<\/td>\n<td style=\"width: 21.3033%;\" width=\"96\">1155.24<\/td>\n<td style=\"width: 21.3868%;\" width=\"96\">1089.27<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 3; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\">16.8.0 p3.2<\/td>\n<td style=\"width: 16.8755%;\" width=\"73\">1338.17<\/td>\n<td style=\"width: 21.3033%;\" width=\"96\">1193.48<\/td>\n<td style=\"width: 21.3868%;\" width=\"96\">1125.61<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 4; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\"><em>x times faster<\/em><\/td>\n<td style=\"width: 16.8755%;\" width=\"73\">2.08<\/td>\n<td style=\"width: 21.3033%;\" width=\"96\">2.18<\/td>\n<td style=\"width: 21.3868%;\" width=\"96\">2.19<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 5; mso-yfti-lastrow: yes; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\"><strong><em>average x times faster<\/em><\/strong><\/td>\n<td style=\"width: 16.8755%;\" width=\"73\"><strong>2.15<\/strong><\/td>\n<td style=\"width: 21.3033%;\" width=\"96\"><\/td>\n<td style=\"width: 21.3868%;\" width=\"96\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr style=\"mso-yfti-irow: 0; mso-yfti-firstrow: yes; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.6015%;\" width=\"182\"><strong>Link Time (seconds)<\/strong><\/td>\n<td style=\"width: 16.2907%;\" width=\"73\"><strong>dev<\/strong><\/td>\n<td style=\"width: 21.4703%;\" width=\"96\"><strong>test<\/strong><\/td>\n<td style=\"width: 21.5539%;\" width=\"96\"><strong>ship<\/strong><\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 1; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.6015%;\" width=\"182\">15.9<\/td>\n<td style=\"width: 16.2907%;\" width=\"73\">751.93<\/td>\n<td style=\"width: 21.4703%;\" width=\"96\">682.06<\/td>\n<td style=\"width: 21.5539%;\" width=\"96\">677.07<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 2; height: 15.0pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.6015%;\" width=\"182\">16.7.5<\/td>\n<td style=\"width: 16.2907%;\" width=\"73\">66.76<\/td>\n<td style=\"width: 21.4703%;\" width=\"96\">62.86<\/td>\n<td style=\"width: 21.5539%;\" width=\"96\">59.00<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 3; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.6015%;\" width=\"182\">16.8.0 p3.2<\/td>\n<td style=\"width: 16.2907%;\" width=\"73\">26.72<\/td>\n<td style=\"width: 21.4703%;\" width=\"96\">26.25<\/td>\n<td style=\"width: 21.5539%;\" width=\"96\">22.90<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 4; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.6015%;\" width=\"182\"><em>x times faster<\/em><\/td>\n<td style=\"width: 16.2907%;\" width=\"73\">28.14<\/td>\n<td style=\"width: 21.4703%;\" width=\"96\">25.98<\/td>\n<td style=\"width: 21.5539%;\" width=\"96\">29.57<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 5; mso-yfti-lastrow: yes; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.6015%;\" width=\"182\"><strong><em>average x times faster<\/em><\/strong><\/td>\n<td style=\"width: 16.2907%;\" width=\"73\"><strong>27.90<\/strong><\/td>\n<td style=\"width: 21.4703%;\" width=\"96\"><\/td>\n<td style=\"width: 21.5539%;\" width=\"96\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr style=\"mso-yfti-irow: 0; mso-yfti-firstrow: yes; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\"><strong>End-to-end (seconds)<\/strong><\/td>\n<td style=\"width: 16.8755%;\" width=\"73\"><strong>dev<\/strong><\/td>\n<td style=\"width: 21.3033%;\" width=\"96\"><strong>test<\/strong><\/td>\n<td style=\"width: 21.3868%;\" width=\"96\"><strong>ship<\/strong><\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 1; height: 15.75pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\">15.9<\/td>\n<td style=\"width: 16.8755%;\" width=\"73\">3531.73<\/td>\n<td style=\"width: 21.3033%;\" width=\"96\">3288.03<\/td>\n<td style=\"width: 21.3868%;\" width=\"96\">3138.99<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 2; height: 15.0pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\">16.7.5<\/td>\n<td style=\"width: 16.8755%;\" width=\"73\">1388.23<\/td>\n<td style=\"width: 21.3033%;\" width=\"96\">1218.10<\/td>\n<td style=\"width: 21.3868%;\" width=\"96\">1148.27<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 3; height: 15.0pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\">16.8.0 p3.2<\/td>\n<td style=\"width: 16.8755%;\" width=\"73\">1364.89<\/td>\n<td style=\"width: 21.3033%;\" width=\"96\">1219.73<\/td>\n<td style=\"width: 21.3868%;\" width=\"96\">1148.51<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 4; height: 15.0pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\"><em>x times faster<\/em><\/td>\n<td style=\"width: 16.8755%;\" width=\"73\">2.59<\/td>\n<td style=\"width: 21.3033%;\" width=\"96\">2.70<\/td>\n<td style=\"width: 21.3868%;\" width=\"96\">2.73<\/td>\n<\/tr>\n<tr style=\"mso-yfti-irow: 5; mso-yfti-lastrow: yes; height: 15.0pt; mso-prop-change: 'David Li' 20201028T1437;\">\n<td style=\"width: 40.3509%;\" width=\"182\"><strong><em>average x times faster<\/em><\/strong><\/td>\n<td style=\"width: 16.8755%;\" width=\"73\"><strong>2.67<\/strong><\/td>\n<td style=\"width: 21.3033%;\" width=\"96\"><\/td>\n<td style=\"width: 21.3868%;\" width=\"96\"><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<h2><\/h2>\n<h2>Analysis<\/h2>\n<p>The C++ team made large steps towards Linker performance in Visual Studio version 16.0 and 16.2 with two significant changes to the linker that help speed up the generation of Program Database (PDB) files. Type pruning in the backend removes unreferenced type information. By using a fast hash function to identify identical types, type merging sped up. <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/game-performance-and-compilation-time-improvements-in-visual-studio-2019\/\">Please see details in this blog post.<\/a><\/p>\n<p>In version 16.6, changes were made to algorithms inside the PDB and Debug Interface Access components. Next, optimization efforts were made in <a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/faster-c-iteration-builds\/\">version 16.7 to speed up the worst case Incremental Linking time<\/a>. Later, multi-threading the generation of PDB files further improved performance in version 16.8. Please stay tuned for future blogs that dive deeper into these improvements.<\/p>\n<p>&nbsp;<\/p>\n<h2>Developer Conversation<\/h2>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/G5_Kait_and_Marcus_amulet-scaled.jpg\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-27046\" src=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/G5_Kait_and_Marcus_amulet-scaled.jpg\" alt=\"Image G5 Kait and Marcus amulet\" width=\"2500\" height=\"1391\" srcset=\"https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/G5_Kait_and_Marcus_amulet-scaled.jpg 2500w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/G5_Kait_and_Marcus_amulet-300x167.jpg 300w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/G5_Kait_and_Marcus_amulet-1024x570.jpg 1024w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/G5_Kait_and_Marcus_amulet-768x427.jpg 768w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/G5_Kait_and_Marcus_amulet-1536x855.jpg 1536w, https:\/\/devblogs.microsoft.com\/cppblog\/wp-content\/uploads\/sites\/9\/2020\/11\/G5_Kait_and_Marcus_amulet-2048x1140.jpg 2048w\" sizes=\"(max-width: 2500px) 100vw, 2500px\" \/><\/a><\/p>\n<p><strong>Aurel from The Coalition<\/strong> spoke to us about how improved build times have affected the studio.<\/p>\n<p>What prompted the move to Visual Studio 2019?<\/p>\n<blockquote>\n<p style=\"padding-left: 40px;\">So, we\u2019re not actually moving Gears 5 to 2019. We did the work to get Visual Studio 2019 going on PC for the purpose of comparing build times and providing feedback. Gears 5 shipped over a year ago and the game has been very carefully tuned; therefore, we don\u2019t want to take the risk of changing the toolchain as we have limited testing capacity and very slight optimization changes could change the balance of the game in very subtle ways. In addition, the XDK does not support 2019 so we would need to support two toolchains which is something we don\u2019t have the capacity for.<\/p>\n<p style=\"padding-left: 40px;\">The results of the experiment reinforced our desire to stay current with new versions of Visual Studio for our future projects.<\/p>\n<\/blockquote>\n<p>What are some immediate benefits?<\/p>\n<blockquote>\n<p style=\"padding-left: 40px;\">We are using Visual Studio 2019 on our next (unannounced) project and the benefits are many: faster compile\/link times, more responsive UI, much more stable debugging.<\/p>\n<\/blockquote>\n<p>What are some potential long-term benefits?<\/p>\n<blockquote>\n<p style=\"padding-left: 40px;\">Developer iteration is key to our success, any time we can shave a few seconds off our iteration loop, it means developers have more time to write quality code, fix bugs etc. Faster build times on the build farm means our testing team can get a build sooner, can find more bugs etc.<\/p>\n<p style=\"padding-left: 40px;\">In the end, we will end up with a better game for our fans.<\/p>\n<\/blockquote>\n<p>How might this change the workflow patterns of the studio?<\/p>\n<blockquote>\n<p style=\"padding-left: 40px;\">With Visual Studio 2017 (and 2019 prior to 16.8), we had to choose between fast link times or debugging stability (by using \/debug:fastlink or not).<\/p>\n<p style=\"padding-left: 40px;\">With 16.8, we can have both as link times without fastlink are very fast.<\/p>\n<\/blockquote>\n<h2>Upgrade Visual Studio<b><i><\/i><\/b><\/h2>\n<p><a href=\"http:\/\/aka.ms\/vspreview\">Download the latest Visual Studio 2019 Preview<\/a> and experience faster end-to-end compile times for your own projects.<\/p>\n<p>How will these improvements impact your day-to-day workflow? Talk to us in the comments below, on <a href=\"https:\/\/twitter.com\/VisualC\">Twitter (@VisualC)<\/a>, or via email at <a href=\"mailto:visualcpp@microsoft.com\">visualcpp@microsoft.com<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Visual Studio 2019\u00a0v16.8 Preview 3.2\u00a0introduces\u00a0significant build and link time improvements.\u00a0In this blog post,\u00a0we\u00a0detail how\u00a0the team in The Coalition building\u00a0Gears 5\u00a0tested\u00a0the\u00a0compile and link times in\u00a0three\u00a0different versions of Visual Studio.<\/p>\n","protected":false},"author":39811,"featured_media":27044,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[1,3927,218],"tags":[78,140,3883,25],"class_list":["post-27039","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cplusplus","category-game-development","category-performance","tag-build-times","tag-c","tag-gaming","tag-linker"],"acf":[],"blog_post_summary":"<p>Visual Studio 2019\u00a0v16.8 Preview 3.2\u00a0introduces\u00a0significant build and link time improvements.\u00a0In this blog post,\u00a0we\u00a0detail how\u00a0the team in The Coalition building\u00a0Gears 5\u00a0tested\u00a0the\u00a0compile and link times in\u00a0three\u00a0different versions of Visual Studio.<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/27039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/users\/39811"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/comments?post=27039"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/posts\/27039\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media\/27044"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/media?parent=27039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/categories?post=27039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/cppblog\/wp-json\/wp\/v2\/tags?post=27039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}