{"id":713,"date":"2013-10-14T08:00:00","date_gmt":"2013-10-14T08:00:00","guid":{"rendered":"https:\/\/blogs.msdn.microsoft.com\/visualstudio\/2013\/10\/14\/asynchronous-solution-load-performance-improvements-in-visual-studio-2013\/"},"modified":"2022-10-03T14:16:12","modified_gmt":"2022-10-03T21:16:12","slug":"asynchronous-solution-load-performance-improvements-in-visual-studio-2013","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/visualstudio\/asynchronous-solution-load-performance-improvements-in-visual-studio-2013\/","title":{"rendered":"Asynchronous Solution Load Performance Improvements in Visual Studio 2013"},"content":{"rendered":"<h2>Improving Solution Loads<\/h2>\n<p>Over the past few years, the Visual Studio team has been working hard to improve Visual Studio performance and scalability when working with large solutions. <a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\/suggestions\/2197975-make-solutions-load-faster\">One area of particular interest to many of you<\/a> has been our initial solution load times. For Visual Studio 2012, we implemented changes that <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/visual-studio-11-beta-performance-part-2\/\">enabled large solutions to load asynchronously<\/a>, which results in substantially faster load times for many of our users. For Visual Studio 2013, we\u2019ve continued to improve solution load performance by deferring the initialization of document tabs until they are needed. In this post, we\u2019ll walk you through the changes you can expect to see in the latest release, and some of the early performance data we\u2019re seeing from customers using pre-release builds.<\/p>\n<h2>The Big Load<\/h2>\n<p>Prior to VS 2012, solutions were loaded all at once. During the load, the entire IDE was blocked while all the necessary preparation and initialization was done to prepare the solution for use. Users working with larger solutions are likely familiar with this dialog:<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7652.clip_image001_480340E1.png\"><img decoding=\"async\" id=\"longdesc-return-222103\" class=\"aligncenter size-full wp-image-222103\" tabindex=\"-1\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7652.clip_image001_480340E1.png\" alt=\"IDE blocked dialog\" width=\"472\" height=\"135\" longdesc=\"https:\/\/devblogs.microsoft.com\/visualstudio?longdesc=222103&amp;referrer=713\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7652.clip_image001_480340E1.png 472w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7652.clip_image001_480340E1-300x86.png 300w\" sizes=\"(max-width: 472px) 100vw, 472px\" \/><\/a><\/p>\n<p>For a small solution with only a couple of projects, loading usually doesn\u2019t take too much time. But as the size and complexity of solutions grow, so does the time it takes to load the solution, and thus the time spent waiting for this dialog to disappear. So while working on VS 2012, we asked ourselves, \u201cWhat would happen if we only loaded the projects a user needs to get back to work?\u201d<\/p>\n<h2>Going Async<\/h2>\n<p>We reasoned that at any given moment, a developer is only actively working on a couple of projects in the solution. If we could determine which projects were the most important to a developer when the solution was closed, we could then load those projects up front on the next solution load. The remaining projects could then be loaded at some point down the road when they wouldn\u2019t interfere with developer productivity.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7245.clip_image002_thumb_7CA39D1C.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233558\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7245.clip_image002_thumb_7CA39D1C.png\" alt=\"Image 7245 clip image002 thumb 7CA39D1C\" width=\"288\" height=\"420\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7245.clip_image002_thumb_7CA39D1C.png 288w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7245.clip_image002_thumb_7CA39D1C-206x300.png 206w\" sizes=\"(max-width: 288px) 100vw, 288px\" \/><\/a><\/p>\n<p>The aforementioned <a href=\"http:\/\/blogs.msdn.com\/b\/visualstudio\/archive\/2012\/03\/12\/visual-studio-11-beta-performance-part-2.aspx\">post<\/a> does a great job describing asynchronous solution loading, so I won\u2019t go into great detail here. But for this conversation, the key concept to know is that we use open documents to determine which projects should be loaded up front on the next solution load. Using the concept of \u2018locality of reference\u2019, we infer that if a document was open when the solution was closed, then it is likely to be needed again soon after the solution is reopened. To ensure the document is in a usable state after the solution is loaded, we must load the project that owns that document (and any projects it depends on) to ensure editing and navigation work as expected. Because we block the UI with a modal dialog until this is complete, we refer to this as the <em>modal phase<\/em> of solution load. Any remaining projects will be loaded asynchronously at a later time when they won\u2019t interfere with a developer\u2019s productivity (referred to unsurprisingly as the <em>async phase<\/em>).<\/p>\n<h2>Progress!<\/h2>\n<p>Our internal testing showed significant potential gains to be had from loading solutions asynchronously, but ultimately what matters is how much of a gain users get in practice. To accomplish this, we added new telemetry points that allowed us to analyze how well asynchronous solution loading was working for our customers. Use those points, we can evaluate loads occurring in Visual Studio 2012 Update 3 . While single-project solutions can be loaded asynchronously, they aren\u2019t the primary load scenario being targeted by these improvements, so we\u2019ll look at loads containing at least 2 projects first.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/6663.image_thumb_6A5AD65A.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233557\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/6663.image_thumb_6A5AD65A.png\" alt=\"Image 6663 image thumb 6A5AD65A\" width=\"232\" height=\"233\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/6663.image_thumb_6A5AD65A.png 232w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/6663.image_thumb_6A5AD65A-150x150.png 150w\" sizes=\"(max-width: 232px) 100vw, 232px\" \/><\/a> <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/4520.clip_image004_1C5276E5.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233556\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/4520.clip_image004_1C5276E5.png\" alt=\"Image 4520 clip image004 1C5276E5\" width=\"481\" height=\"289\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/4520.clip_image004_1C5276E5.png 481w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/4520.clip_image004_1C5276E5-300x180.png 300w\" sizes=\"(max-width: 481px) 100vw, 481px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>These numbers are pretty promising. We see that for a quarter of all solution loads, we defer loading over 60% of the solution and only block the IDE for around 2 seconds. As we look at a larger set of solution loads, we begin to see the impact of asynchronous solution load start to diminish. By the 75<sup>th<\/sup> percentile, solution loads are loading almost the entire solution synchronously and the time to responsive has grown greatly.<\/p>\n<p>While even solutions with just 2 projects can benefit from asynchronous loading, we expected the impact to be much more noticeable for larger solutions. For example, when focusing on even larger solutions with 10 or more projects, we can see an even greater impact from asynchronous loading.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/1411.image_thumb_5EC5191B.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233554\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/1411.image_thumb_5EC5191B.png\" alt=\"Image 1411 image thumb 5EC5191B\" width=\"221\" height=\"217\" \/><\/a> <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/2500.clip_image006_thumb_05932F5C.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233553\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/2500.clip_image006_thumb_05932F5C.png\" alt=\"Image 2500 clip image006 thumb 05932F5C\" width=\"481\" height=\"289\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/2500.clip_image006_thumb_05932F5C.png 481w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/2500.clip_image006_thumb_05932F5C-300x180.png 300w\" sizes=\"(max-width: 481px) 100vw, 481px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>The 75<sup>th<\/sup> percentile has increased the number of projects deferred from 0.3% to 18%. And though the modal load time has increased slightly, it would be much greater without deferred project loading.<\/p>\n<p>While this was encouraging progress, we wanted to know what else could be done to further improve the number of projects loaded asynchronously. Looking again at our telemetry, we found that one of the variables most strongly correlated with slower load times was the number of documents left open between sessions.<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/4456.clip_image008_thumb_176FC329.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233552\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/4456.clip_image008_thumb_176FC329.png\" alt=\"Image 4456 clip image008 thumb 176FC329\" width=\"484\" height=\"289\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/4456.clip_image008_thumb_176FC329.png 484w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/4456.clip_image008_thumb_176FC329-300x179.png 300w\" sizes=\"(max-width: 484px) 100vw, 484px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Looking at loads this way illuminated that having just one project with an open document causes the number of modally loaded projects to increase greatly. We still see noticeable improvements in the amount of time it takes the IDE to be responsive, but there was clearly room for further improvement.<\/p>\n<p>Based on this, for VS 2013 we asked ourselves a familiar question: \u201cWhat would happen if we loaded only the documents a user was most likely to use?\u201d<\/p>\n<h2>Getting Lazy. In a Good Way.<\/h2>\n<p>As a result of normal development activities (such as editing &amp; debugging), a solution can often end up with many documents open in the IDE. The chart above indicates that as the number of projects with open documents increases, so too does the number of projects synchronously loaded. However, many of those documents aren\u2019t actively being used and are effectively hidden behind other documents or off screen. Most of the time, only a smaller subset of documents is visible at any given time. These documents are most likely the last ones used by a developer when closing the solution and are most likely the ones to be first used on the next solution load.<\/p>\n<p>Using the same logic that led us to only load the essential projects in the solution up front, we reasoned that if we only load projects for the visible documents, we could further reduce the number of projects that had to be loaded synchronously. The projects that owned the remaining, non-visible documents would now load asynchronously, just as if they didn\u2019t own any open documents at all. Only in the event that one of the non-visible documents needs to become visible \u2013 such as when the document\u2019s tab is clicked \u2013 do we incur the cost of loading the necessary projects.<\/p>\n<p>We also discovered another set of savings by deferring document loads. In addition to avoiding certain project loads, we also noticed that we could potentially defer loading entire components of the IDE. Each distinct type of document that is opened in the IDE has a corresponding set of assemblies and data structures that need to be loaded and initialized in order to properly render that document (designers, for example). For any of these document types that are open, but non-visible when the solution is loaded, we now also avoid paying the cost of bootstrapping those subsystems until they are required. In some cases, the time saved by not loading these components was actually greater than the time saved by not loading the projects!<\/p>\n<h2>What It Looks Like<\/h2>\n<p>Visually, the IDE looks just the same. All the open document tabs from the previous session are displayed exactly the same as when the solution was closed . They all appear to be loaded just as before as well. However, only the fully visible ones are loaded while the rest remain in an uninitialized state until needed.<\/p>\n<p>For extenders who need to interact with the open documents programmatically, they will continue to find all the documents present in the Running Document Table (RDT). The normal methods of accessing the documents through the RDT have been updated to ensure that the necessary projects are loaded and the document is fully initialized before returning the desired content.<\/p>\n<table style=\"width: 999px;\" border=\"1\" cellspacing=\"0\" cellpadding=\"5\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"997\">\n<h2><strong>A note on best practices for VS extenders:<\/strong><\/h2>\n<p>To help ensure document deferral works to its full potential, it\u2019s important that components and extensions access deferred documents only when truly necessary. Extensions can check for the following new properties to detect when a document is in the deferred state and wait until they are fully loaded before interacting with them:<\/p>\n<p>For IVsWindowFrame, check for <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/vstudio\/microsoft.visualstudio.shell.interop.__vsfpropid6(v=vs.120).aspx\">VSFPROPID_PendingInitialization<\/a>.<\/p>\n<p>For native code working with the running document table, check for the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/vstudio\/microsoft.visualstudio.shell.interop._vsrdtflags4(v=vs.120).aspx\">RDT_PendingInitialization<\/a> flag being returned from <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/microsoft.visualstudio.shell.interop.ivsrunningdocumenttable.getdocumentinfo.aspx\">IVsRunningDocumentTable.GetDocumentInfo()<\/a>.<\/p>\n<p>For managed code, use <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/vstudio\/microsoft.visualstudio.shell.interop.ivsrunningdocumenttable4.getdocumentflags(v=vs.120).aspx\">IVsRunningDocumentTable4.GetDocumentFlags()<\/a> to check for the same flag.<\/p>\n<p>When a deferred document <em>is <\/em>initialized, the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/vstudio\/microsoft.visualstudio.shell.interop.__vsrdtattrib3(v=vs.120).aspx\">RDTA_DocumentInitialized<\/a> attribute will be announced by <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/vstudio\/bb140303(v=vs.120).aspx\">IVsRunningDocTableEvents3.OnAfterAttributeChangeEx<\/a>.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2>Going Further<\/h2>\n<p>Based on our prototypes, we were pretty confident that delaying initialization of the non-visible documents would help shave time off of many solution loads. But we were left with the question of when these deferred documents <em>should<\/em> be loaded. After some discussion we ended up with two possibilities: either asynchronously at the end of the solution load, or on-demand as they are needed.<\/p>\n<p>The first method was one we were familiar with as we use the same strategy by loading projects asynchronously. During the solution load, some projects and documents might briefly be in an uninitialized state, but eventually everything would reach the fully loaded state that is expected by most components of the IDE.<\/p>\n<p>However, we found that in certain scenarios, initializing the documents asynchronously after the solution load is complete could lead to some very significant responsiveness issues. It\u2019s important to remember that the IDE is in an interactive state at this point and we expect developers to be actively working on their solutions. Any noticeable delay in the UI could be an annoying disruption for someone trying to get work done. And while we saw that many documents could be initialized without causing perceptible UI hangs, some of the more complex documents would. Specifically, the first time we tried to initialize some designers or very large files, we could experience very noticeable delays as entire components were loaded and initialized for the first time. From the user\u2019s viewpoint, this could happen unexpectedly and without warning. Definitely not a good user experience. So we opted for the second option of only loading documents on demand. Using this model, a user only ever pays the cost of loading a document if they absolutely need it.<\/p>\n<h2>Early Results<\/h2>\n<p>Using some of our internal benchmark solutions, we\u2019ve been able to demonstrate just how much of an improvement deferring document initialization can provide with even a small number of open documents (in this case 5).<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7183.clip_image010_thumb_6C2B2C21.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233551\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7183.clip_image010_thumb_6C2B2C21.png\" alt=\"Image 7183 clip image010 thumb 6C2B2C21\" width=\"481\" height=\"289\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7183.clip_image010_thumb_6C2B2C21.png 481w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/7183.clip_image010_thumb_6C2B2C21-300x180.png 300w\" sizes=\"(max-width: 481px) 100vw, 481px\" \/><\/a> <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/8272.clip_image012_thumb_40E6951A.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233550\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/8272.clip_image012_thumb_40E6951A.png\" alt=\"Image 8272 clip image012 thumb 40E6951A\" width=\"481\" height=\"289\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/8272.clip_image012_thumb_40E6951A.png 481w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/8272.clip_image012_thumb_40E6951A-300x180.png 300w\" sizes=\"(max-width: 481px) 100vw, 481px\" \/><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>&nbsp;<\/p>\n<p>Of course, it\u2019s more interesting to look at actual results users are experiencing from document deferral. To do that, we can take a look at some initial telemetry from the Preview and RC releases where delayed document initialization resulted in projects being deferred:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/5633.image_thumb_52C328E7.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233549\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/5633.image_thumb_52C328E7.png\" alt=\"Image 5633 image thumb 52C328E7\" width=\"442\" height=\"247\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/5633.image_thumb_52C328E7.png 442w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/5633.image_thumb_52C328E7-300x168.png 300w\" sizes=\"(max-width: 442px) 100vw, 442px\" \/><\/a><\/p>\n<p>From this data, we can start to develop an early idea of how delaying document initialization is impacting solution loads of actual users. So far, we\u2019re seeing about a quarter of the projects in a solution and over half the open documents being deferred from loading synchronously. And these projects deferrals are <em>in addition<\/em> to any projects that would already have been loaded asynchronously!<\/p>\n<p>In addition to the general averages, we can also see some standout loads that really demonstrate what deferring document initialization is capable of:<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/2402.image_thumb_407A6225.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233548\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/2402.image_thumb_407A6225.png\" alt=\"Image 2402 image thumb 407A6225\" width=\"433\" height=\"149\" srcset=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/2402.image_thumb_407A6225.png 433w, https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/2402.image_thumb_407A6225-300x103.png 300w\" sizes=\"(max-width: 433px) 100vw, 433px\" \/><\/a><\/p>\n<h2>Conclusion<\/h2>\n<p>In Visual Studio 2012, we took a significant first step toward improving the performance of loading solutions in the IDE. With deferred document initialization, we\u2019ve taken another step to reduce the amount of time spent waiting for solutions to load and allow users to start being productive earlier than before.<\/p>\n<p>In addition to showing off a new feature in the next release, we hope this post shows how important telemetry and your feedback is when we\u2019re planning future features and improvements. We\u2019ll continue to analyze the data we receive from the <a href=\"http:\/\/msdn.microsoft.com\/en-us\/library\/zzszcehe(v=vs.120).aspx\">Customer Experience Improvement Program<\/a> to evaluate solution load quality, in addition to other channels available to you to provide feedback. So grab the <a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/visual-studio-2013-rc-available-now\/\">RC release<\/a> and let us hear from you through <a href=\"http:\/\/connect.microsoft.com\/VisualStudio\">Connect<\/a>, <a href=\"http:\/\/visualstudio.uservoice.com\/forums\/121579-visual-studio\">UserVoice<\/a>, the Send-A-Smile system in VS, or in the comments below!<\/p>\n<table style=\"width: 880px;\" border=\"0\" cellspacing=\"0\" cellpadding=\"2\">\n<tbody>\n<tr>\n<td valign=\"top\" width=\"132\"><a href=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/6862.image_thumb_0FD14F5B.png\"><img decoding=\"async\" class=\"aligncenter size-full wp-image-233547\" src=\"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-content\/uploads\/sites\/4\/2013\/10\/6862.image_thumb_0FD14F5B.png\" alt=\"Image 6862 image thumb 0FD14F5B\" width=\"116\" height=\"157\" \/><\/a><\/td>\n<td valign=\"top\" width=\"746\"><strong>Ben Bradley<\/strong>\u2013 SDET Visual Studio IDE Team<\/p>\n<p>Ben started as an SDET at Microsoft over 8 years ago working on the core IDE and extensibility platforms of Visual Studio. Before Microsoft\u00a0he was a math &amp; CS major at the University of Texas at Austin. Currently, he works on the Performance &amp; Reliability team coming up with new ways to test and evaluate the performance of Visual Studio.\u00a0When\u00a0he is\u00a0not working on improving perf &amp; reliability,\u00a0he spend a lot of time swimming, biking and running ridiculously long distances \ud83d\ude42<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Improving Solution Loads Over the past few years, the Visual Studio team has been working hard to improve Visual Studio performance and scalability when working with large solutions. One area of particular interest to many of you has been our initial solution load times. For Visual Studio 2012, we implemented changes that enabled large solutions [&hellip;]<\/p>\n","protected":false},"author":13,"featured_media":255385,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[155],"tags":[9,53,126],"class_list":["post-713","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-visual-studio","tag-debug","tag-performance","tag-visual-studio-2013"],"acf":[],"blog_post_summary":"<p>Improving Solution Loads Over the past few years, the Visual Studio team has been working hard to improve Visual Studio performance and scalability when working with large solutions. One area of particular interest to many of you has been our initial solution load times. For Visual Studio 2012, we implemented changes that enabled large solutions [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/713","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/comments?post=713"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/posts\/713\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media\/255385"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/media?parent=713"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/categories?post=713"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/visualstudio\/wp-json\/wp\/v2\/tags?post=713"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}