Performance Profiling | Part 2: Choosing the right tool

Video Statistics and Information

Video
Captions Word Cloud
Reddit Comments
Captions
>> In part 1, we talked about profiling, what it is, and when and why you should use it. Now, it's time to pick the right tool to use in Visual Studio to do so. So how did we do that? Find out in part 2 of this jam-packed episode of Visual Studio Toolbox. [MUSIC] >> Hi everyone. Welcome to Visual Studio Toolbox. I'm your host, Leslie Richardson, and I'm joined once again by Profiling PM Sagar Shetty for part 2 of our series on profiling. Welcome, Sagar. >> Thanks for having me, Leslie. Good to be back. >> Great. Last, in part 1, we talked about just a generalization about what profiling even is, when you should use it, why you should use it. At this point, I don't know about how to use tools. What are some of the tools available to us in Visual Studio that we can use to fulfill our profiling dreams? >> Well, you're in luck, Leslie, because this episode is all about tools and when to use them. So to kick things off, within Visual Studio at a high level, there's two sets of tools that you can use for profiling. The first one is the Performance Profiler. So basically, the Performance Profiler is a suite, you can think of it as a standalone set of tools that gives you the opportunity to do some really in-depth performance analysis. You can use multiple tools in conjunction. How exactly do you use these tools and where do you go to find them? We touched on this a little bit in the last episode and I'm actually going to screen share and go into Visual Studio here. Yeah. I'm in Visual Studio and to get to the performance profile, there's a couple of different ways. The keyboard shortcut is Alt-F2. You can also go to "Debug", "Performance Profile", and that will also show you this keyboard shortcut here. We get to this kind of a landing page. Like I was saying before, it's essentially a suite of performance tools that allows you to really drive your performance investigation for whatever the nature of your investigation is. So I thought we just go through here and talk about all the tools at a high level and when you might use each one. Excited to announce that we have some newer tools up and running. Let's start with at the top here, the .NET Async tool. Leslie, I know you're really familiar, we joked last time about asynchronous code and digging into asynchronous tasks. We have a relatively new tool here at the .NET Async tool. Basically, what this allows you to do is really investigate the nature of your asynchronous code and your asynchronous tasks. What this tool is going to show you is the different asynchronous tasks, the start, the stop time, the duration of when these tasks take place, how the overlap is occurring, and give you some more insight into how your asynchronous code is functioning. If you're doing a lot with Async, this is definitely a tool to checkout. Like I said, it's relatively new. >> That sounds great since like as is whenever you're trying to diagnose Async code, it's not the easiest. >> Yeah. >> Yeah. >> Yeah. Really, something we wanted to do here was increase that visualization. Because like you said last time, it's not necessarily easy to diagnose or track down where the issues are happening. Again, we're bringing some more visualization to the Diagnostics hub, and this is something that we didn't have before, so we're really excited for that. The next tool is the .NET Perf Counters tool. This is actually a brand new tool shipping in 16-7. So the version of VS I have up right now is actually a preview build, its 16-7 Preview 3. So if you're using, and I'll go ahead and plug this, like I'd highly recommend customers to start testing. This is an external preview build so customers have access to this. You can go ahead and install that right now and go ahead and start playing around with that .NET Perf Counters tool. But basically, this tool is a tool that helps visualize and support .Net-Counters. What are .Net Counters? Basically, they're a way to look at a set of metrics that are your initial start to your performance investigations. So these are metrics like exceptions per second, maybe some information around garbage collection, CPU utilization. Up until this point, the primary way to visualize and consume these metrics was through the command line. So what we've done is brought some of that experience into Visual Studio to give you some more deeper visualizations and insights. We have a table to give you some more information about these metrics as well. We're really excited about the .NET Counters tool, which should be coming to everyone in GA in the next month or so, early August. Yeah. That's the .Net Performance Counters tool. Moving along here, the next tool is the CPU Usage tool, an absolute staple in the Performance Profiler. We talked about in the first episode how CPU investigations and that bucket of CPU usage and utilization issues is a common scenario that comes up. The CPU Usage tool is really the driving force and the go-to tool to do CPU investigations. Basically, this is all about seeing how CPU time is being spent during your program's execution finding functions and modules that are taking up a lot of your CPU time and taxing your CPU the most. That's a very, very common tool and we're going to talk about that one more and how to optimize that little bit later on. >> That's not easy to track down sometimes. >> Yeah. There's definitely a lot you can tweak with the settings there and we'll definitely go into that. Next tool, also new-ish, but it's been around for a little bit, is the Database tool. The Database tool is essentially just looking at all the queries your application is making and your applications in many cases are making quite a lot. This is giving you that sense of what are all the queries my app is making and essentially, how long are they taking? This is something really good to point out here. Going back to VS, you'll notice that there are check boxes next to a lot of these tools. Something I want to stress is that you can use multiple of these tools in conjunction. For example, using the Database tool and the CPU Usage tool might be interesting because the Database tool is showing queries that your application is making and one might be taking a long time. Then using the CPU Usage tool, that gives you more into expensive operations and what functions that I need to manipulate to optimize that query if that makes sense. I definitely want to stress this is not just a one-off, you use one tool at a time. You have the checkboxes here. You can see that many of these tools can be used in conjunction. So that's a good thing to keep in mind. >> What's the catch? Is there a performance hit when it comes to the time it takes to diagnose all of this with the more boxes that you check? >> Yeah. You got it. Definitely, there's a little bit of that and we try to safeguard our customers a little bit. As an example, I checked the box the Memory Usage tool here, and you notice a lot of these other box is gray. We'll touch on this in the next episode when we're interacting with the command line. You can technically run all of these tools in conjunction. But within VS, we try to safeguard our customers a little bit and say that for certain tools that are really, really expensive, we try to run them in isolation just so you don't have a degraded experience. But yes, even with some of these other ones, I still would recommend when you can run multiple, go for it. If you're running into deep performance issues, sure, maybe turn it back a little bit. But it's great that you can really run a lot of these tools in conjunction. As we continue to develop the Performance Profiler and update it, we're going to try to make a better and better seamless experience where playing with multiple tools that once really gives you those deep insights and connections between tools. >> Really cool because I think for a lot of people diagnosing your code is already a tedious task, so if you can speed it up and make it more efficient by having multiple tools going on at the same time, then why not? >> Absolutely, and especially sometimes when you're starting off your investigation, you don't necessarily know exactly where the problem lies, is it a memory issue, is it CPU related, is it something database async? Being able to fire off a lot of these tools at once helps you get going like you suggest. So continuing on, I believe we just talked about database. So events viewer, also relatively new tool. Essentially, this is looking at ETW and NetTrace based events, things like module loading, thread starts, system configuration, and essentially, looking at a ton of different events and their corresponding properties. This allows you to do all things like looking at logging messages and exceptions and things of that nature. Really getting some more events into the Diag Tab, which wasn't necessarily there before. Then lastly, under the available tools section for now, and just to point out, so available tool is just talking about what's relevant for this particular app I have up, we have other tools that in this situation are not applicable, but they are tools and the diagnostics app. We're essentially showing you for any app you have, what are the relevant tools that you can use in that particular situation. Just wanted to make that delineation. But the last available tool in this situation is Memory Usage tool, another staple in the performance profile. This is actually one of two memory-related tools we have in the performance profile, the next one I'll talk about after, but the Memory Usage tool is really good for a lot of different scenarios. I think one of its defining characteristics is that it can be used in .NET Core managed scenarios, it can also be used in native scenarios as well. So it can be used in quite a variety of app types, mixed-mode apps as well, that mix both native and managed, and so it's really good for tracking down memory leaks, code pathways that are allocating a lot of memory, and etc. Segueing into the other memory profiler, which is the .NET Object allocation tracking tool, a bit of a mouthful, but I would definitely recommend you check it out, especially if you're working on .NET Core applications absolutely because we've actually been updating this tool quite a bit. You've got quite a bit of an overhaul in 16.5 where we added some icons, some killer icons in there, fixed up the backtrace a bit so that it's essentially easier. The key with this tool again, also, is really figuring out what are the code pathways that are allocating a lot of code and what in this case, .NET objects are taking up a lot of code. It's really geared towards, for you as the user, figuring out what are the actionable and tangible areas of my code I can actually impact in order to fix my memory problems. Also with this tool, you get some nice insights into garbage collection as well, so that's definitely something to think about. >> What do you say, the Memory Usage tool would be good for the C++ scenarios, which most people are familiar with revolving around memory leaks? >> Exactly. I really think of that one as more of the native tool, but for the managed scenario is exactly, I would definitely recommend checking out the .NET alloc tool, especially with some of the updates we've been doing. >> Cool. >> Rounding up the street here. You've got the Application Timeline tool and instrumentation. Application Timeline, this is really looking at XAML applications and improving the performance. They're things like improving the time spent rendering frames, servicing networks for your different XAML apps, not one of the more commonly used tools, but it's definitely there and really there to tweak XAML applications in particular. Then lastly, instrumentation. This is essentially injecting code bits to better understand your code and certain tasks. We have two main data collection methods within the Performance Profiler: One is sampling, which is taking some data points at periodic intervals and aggregating that together. But by definition with a sampling rate, there's some granularity there and you lose some of that data in-between certain points and certainly, you can increase sampling rate. But instrumentation essentially is injecting code to get a very very detailed set of data at a very fine-tuned point, like timing interval. Essentially, you're injecting code to better understand various operations, so just reading the writing to disc and etc. Again, not one of our more commonly used tools, but it is there. So that's the Performance Profiler, it's a suite of non-debugger integrated profiling tools that really shows the performance that's most close to the end-user experience, and that's our first set. We do have a second set though. >> That's a lot of tools that I'm sure a lot of people were unaware of. Is all of this enterprise exclusive or can anyone use it? >> Yeah, so this is available to everyone, so community, professional enterprise, it doesn't matter. It's available with all those cues. >> Sweet. >> Yeah. The second set of tools is the Diagnostics Tool window, and I think you'll really appreciated this, Leslie, because the key thing here is that this is integrated with the debugger. With the Performance Profiler, what we're looking at is more of a standalone set of tools. With the Diagnostics Tool window, we're going to look at a few things that's really cool, where it's really playing nicely with the debugger itself. I'm just going to close out of this diag session here. Going back to Visual Studio, we've got this app in the background, we'll talk about this a little bit more here in a second. I'm going to launch this app and I'm going to start debugging. A few different ways to do that, you can hit this star green arrow here, you can hit "F5", you can hit "Debug", "Start Debugging", I'm just going go ahead and hit "F5" out of habit. Let me actually stop debugging here because this actually brings up a great point. Basically, what this is saying here is that we're in a release build, so what I want to do is switch this back over to a debug build, and this is actually really important to bring up. To use the debugger in the most efficient and optimized sense, you want to be in debug mode, and it turns out that that's great for the debugger, and we're going to do this here, but it actually has a bit of an opportunity cost in the sense that the debugger has certain operations that degrade the performance of the performance data, and it doesn't necessarily show you the most accurate performance data. That's not to say that these tools aren't relevant, we'll talk about this more in the next section when we talk about when you would use each tool, but just keep that in mind. For now, let's just continue and we'll revisit this point just to have the best debugging experience. Basically, in this app we have going on here it's a web application that's going over a ton of different ASP.NET scenario. So looking at the app here, we've got retrieving and returning a JSON response, HTTP client to retrieve a JSON response, just some async operations, etc. Going back to VS for a second here, what I want to bring your attention to is the Diagnostic Tool window. >> That window that a lot of people like to close. >> Yeah, exactly, and if you do close it and you want to bring it back up, I would bring your attention to the search bar, and all you have to do is type in Diagnostic Tool window and then you bring it back up. >> As a debugging girl, don't sleep on this window, it's a really cool window, there's a lot of great things in there. I especially like the Events Tab personally. >> Yeah. You heard it here folks, don't sleep on the window. There's four tabs here, and we'll come back to the graphs in a second. But basically we've got the summary, which is showing an overview of different events that might be going on. We have the memory usage pane, so we can take memory snapshots. We have a CPUs usage record profile. Let's walk through some of the other main tabs. Events, we don't have a whole lot going on right now. We just started our apps, so we've got some basic output. I'm going to run a few of those scenarios we saw on the web app in a second, so we'll get some more interesting output here. Memory usage, we haven't done anything again yet, so I'm actually going to go ahead and take a snapshot just so we get a bit of a baseline. This will come back into play a little bit later. As we have some basic information on the time elapsed, some of the objects we have allocated, and how much memory they're taking up until this point. Then CPU usage, we need to set some breakpoints, which I'm going to do here in a second. But once we do that, we'll be able to get some more information on the cost of specific operations in-between breakpoints when our application is in a break state. But for now, we haven't really done a whole lot with the app. So I'm just going to go back to the app, hit a few buttons, do my thing, and then we'll get some more information. I'll just make a few of these JSON calls here. Again, this is just a web app, just going over a few basic scenarios. I'm going to spam that a few times, I'll make a few more requests. This is just going to populate some more interesting data. >> Loving the Pokemon resources. >> Yeah, exactly. We'll do that a few times. We should have at least a little bit of data to work with here. Now I'm going back to VS. If we go to events, hopefully, we see a lot more. We see that a controller is invoked. We have the big JSON content three, we have an HTTP request, we have get. We have a little bit more events now, as we can see after I actually operated a little bit more within my app. This is going to give you some basic information on what's happening here. It's also reflecting the summary. Memory usage, we took that snapshot before we did anything with the app. Let me take another snapshot here again. What we'd expect is, so we have way more objects. They're taking up way more memory, and we have this difference here. What's really cool about this is if you click on this, for example, this is a diff report, and it's going to open up this table here. Now you're getting a little bit more insight into what's going on under the hood. What's cool about this particular report is, this is what we call a diff report or a comparison report. So you have the different object types that are allocating memory over here. To the far right, I can just start with the standard report actually, perhaps that might be a little bit more easy to grasp. At this particular moment in time, for this snapshot, you have the different counts for those particular object types, like the size of how many bytes they are taking up and the inclusive size, so everything within that category. With the diff report, what you're doing is you get those columns, but you're also getting the comparison compared to the first snapshot. So we can see exactly how much the difference was between snapshot one and two. When we had just started our app and then when we did a little bit more exercise to our app, and we can see the exact difference of exactly how much more memory we allocated. I want to go ahead and plug here, and I'll probably plug this a few times. You've got docs that go into these reports a lot more, so we'll definitely be linking that below. That gives you a much more thorough explanation into a lot of these columns, if you want to go back later and play around. But that a high level is what we're doing with these memory reports. The last tab I wanted to talk about is the CPU usage tab. Something we alluded to before, Leslie, is that this window is sitting within the debugger. We know the debugger has got tons of different tools, and perhaps there's nothing more fundamental than the breakpoint. What I want to show here is how we play with both worlds, both the debugging world and the profiling worlds. To do that, I'm going to go into my code little bit. I'm going to go to this JSON output controller file, and I want to set some breakpoints. So on the web app, when I was clicking those buttons, it goes back to these particular tasks. What I want to do this time is when I click one of those buttons, I want to trigger one of these breakpoints. I've set a few here around this task, and now we're going to go back to my web app. Just went to the top here, and I found a scenario. This scenario we want to click. So I'm going to click on this and it's going to hit this first breakpoint. Now, I'm going to continue and run to my second breakpoint, and now we see the CPU usage loading up. Let me go ahead and maximize this just so that everyone can see. >> Good old pie charts. >> Good old pie charts. In this case, this is looking at a top five categories. In this case, since we're looking at CPU usage, just looking at categories that are taking up a lot of the CPUs, bandwidth basically. So taking up a lot of CPU utilization. Within this view, and you get a similar view within the performance profiler as well. These tools are pretty similar between both. But at a high-level, what we have is some functions of interests that we should be looking at. Taking up a lot of the CPU, like a service like this taking up 50 percent of the CPU, and also some hot path. So hot paths are essentially areas of code that you should go back and really look at. Because they are areas that are in this case, taking up a lot of the CPU usage. So you have a few different looks here. You have the functions view, which is showing you specific functions to look at, and then also the scenarios of how you drive down into the code to get there. >> So having this tool is cool enough, but on top of that, Visual Studio will help you operator by just giving you the critical areas that you might want to check out? >> Absolutely, and then that's really important. Because at the end of the day, we want to make it as easy as possible for customers to figure out not just what the problem is, but where it is, and how they can fix it. That's exactly what we're seeing here. Like I said, again, plugging the docks, we'll link them, and there are some more reports that these can go into in more detail, that show you a ton of different other scenarios too. But yeah, that's the diagnostics tool window. As we saw there, playing a little bit with the debugger as well, directly the breakpoints were profiling information here. So kind of two worlds coming together. >> Yeah. One question I had was in the editor, when you place the two breakpoints and you ran F5 and everything, there is some inline information that tells you how many milliseconds have passed and between the time of the first breakpoint to the second breakpoint. I think that's an enterprise exclusive. But if you click on that, does that lead you to the same window just as another entry point that you can use? >> Let me just make sure I understand, Leslie. So we're back in the code here, we're looking at this particular task and you're asking about this perf tip, if I click on this, is this enterprise only? Yeah, I believe this is enterprise-only. Yes. >> Cool. But if you do have enterprise though, it seems like a good way to segue way into that diagnostics tool window immediately, right? >> Oh yeah, absolutely. One more thing I wanted to bring up at the diagnostics tool window. Going back to the swimlanes a little bit. So swimlanes I'm referring to these graphs up top. One of the critical aspects to the swimlanes is that you can time filter, so you can select the time range. Here I already have a time range selected, I can modify that to whatever I want. The important thing here is that when I select a new slice of time, it's filtering my data across all tools, so that particular time range. So if you're trying to do some analysis across multiple tools, memory usage, CPU usage, etc, you can get that time slice for exactly what you want, and then go back and investigate the data across all tools for that particular time. Just wanted to make sure I threw that in there as well. >> What's the order of operations on that? Can I select a segment of that swimlane, and then go into the memory usage tool and run that and it will automatically filter it? >> Yeah, so you have some flexibility here. If you've collected the data, you can always go back and just time filter after that. >> Cool. >> Yes, that's a high-level overview of the tools available within VS. We talked about the performance profiler being more of a suite of standalone tool, the diagnostics tool window being much more integrated with the debugger. >> So for me, since I find myself debugging more often than not, I'd probably be looking at the diagnostic tools window more. You already touched on it a little bit, but where's the circumstance where I'd want to pivot and use the performance profiler? >> Yeah. >> Profiling needs. >> Absolutely. One of the things that we touched on earlier is, when we went to the debugger and used the diagnostics tool window, we switched from the release build to the debug build. Coming back to that point, I would highly recommend when possible, customers use the release build and performance profiler. The reason for that is, that data is the most precise and accurate. The release builds provide optimizations like in-line functioning calls, pruning on used code paths, and storing variables in ways that the debugger can't. The debugger has its own unique operations in terms of how it looks at exceptions, and loads modules that is critical to how it functions. Unfortunately, because of that, it changes the performance time itself. When possible, try to use release builds and try to use the performance profiler, because it essentially gives the exact or most precise data that your customers are going to end up seeing. Furthermore, for different scenarios like external performance problems like file I/O or network issues, you're not going to see much difference between the two tools. Either maybe fine again if you can help it, probably use the performance profiler. For CPU intensive calls, sometimes there could be a significant difference in performance between the two. Definitely check to see if these issues exist in release builds first again, because that's going to be most closely what your customers are seeing, so that will also be the performance profiler. I guess the real thing with the diagnostics tool window though is that, if you're running into some scenario, where you've got some problem that's coming up within debug builds in particular only, and you're trying to replicate that bug, that's when you'd really want to use the diagnostics tool window. >> Cool. That makes sense. With all of these tools, I'm sure there's got to be some drawbacks, or just some issues that users might experience when trying to profile their code. Are there any current existing workarounds, or ways to optimize this experience to be the best that it can be? >> Absolutely. Yeah, I want to go a few optimizations here. By the way, all the docs will be in the description below for this video. We've got a doc actually dedicated in literally just this concept about optimizing profiling settings, and I want to touch on a few high-level points and a few tips. Let me go back to VS for a second here, and stop debugging, and walk you through some of the different tips and things you might want to consider when profiling to optimize the performance of our tools. The first thing I want to do is go to the performance profiler. Again, in this case, this is going to go all to F2, and we've gotten this up. Let me just go ahead and say that, we do the best we can to provide the smartest defaults possible for our customers to really help them get going. I say that to say that the defaults may be good for you in many situations. Tweak these and be cautious when you tweak these because you may not necessarily need to. Only do this if you have to, but these are just some ideas. If our tools aren't acting the way you want, or if performance is a real issue that you can have some of this more configurability if you'd like. I'm in all to F2, and for a few of our tools, like the CPU usage, the .NET object allocate as well, we allow you to adjust sampling rates. How do you do that? I'm on the summary page, and then I click on this "Gear Icon". I'll just show with the CPU usage tool. If I click this, I get this properties page, and essentially this is adjusting the sampling rate. Essentially, how much data am I capturing per second? Like I said, we try to do the best we can with reasonable defaults. I personally haven't had to mess with this much. Of course, I'm not doing as complex investigations as our customers, but if you do need to change the sampling rate, it is here. This is one area I might start with. We have low, we have high, we also have a custom option. For now, I'm just going to leave it on default, but again, just wanted to call that out. Changing the sampling frequency might be a place to start. >> Can you change the sampling rate via the diagnostic tools window? >> Yeah. It brings you back to the exact same profiler properties page, and you can do that as well. >> Sweet. >> We talked about adjusting a sampling rate there. The next thing I want to talk about is just keeping your trace duration short. There's not a whole lot to show here, but I'll just run through a very quick demonstration. When I check the tool, the CPU usage tool, I can start the collection in the profiler. But the key thing to note here is that, when this is collecting, and my app is going to load up in a second here. But this is collecting a ton of data, and it just went ahead and stopped it. But basically, I would recommend you keep your trace duration under five minutes. We try to recommend that to customers because it's pulling in so much data, that if you keep that trace going for a long time, it's going to take forever to bring up those results. That was literally a second to obviously load it very quickly, it doesn't need to be that short, of course. But my point is, just try to keep the trace duration a bit short. Then the next thing I want to talk about is the concept of just my code internally. But basically it's really at a high level, it's the concept of user code versus external code. Basically, many tools within the profiler have this concept of user code verse external code. Essentially, user code is anything that's built locally or rather built by an open project, or open workspace that you have up, and external code is everything else. Why is this important? At the end of the day, Leslie, something we've been talking about is we to create actionable insights for customers. Things that they can actually impact and have control over. Examples of external code might be a third party dependencies or libraries, things that you're importing in, and you don't have as much fine control over. If there's a performance issue with something third-party, maybe that's important to call out, but at the end of the day, you don't have control over optimizing that so much. With showing, or not showing external code or showing just my code, what that allows us to do is collapse all that external code, and I'll show this here in a second, into a single external code frame. What that allows us to do is essentially drastically reduce the amount of data processing that's needed, and it just makes our tools work a lot better. How would I actually enable that setting? There's a few different ways. Again, we're going to link the docs which shows you as well. But in the case of the CPU usage tool, you'll see this show external code box here. There's a checkbox, I had it unchecked. Because our external code is unchecked, when I come over to my functions, everything is nicely collapsed into this one frame. Had that not been unchecked, it would be a lot more, and it would have taken a lot longer for this to load. For other tools like the .NET object allocation tools, we have a button that literally says show just my code that does the same thing as unchecking the external code box. But I just wanted to call that out. Then the last setting that I'll talk about is optimizing profiling settings. I've been plugging the docs a lot. Why don't I just go ahead and show the docs real quick just for this one little bit. This is going to be one of the docs that we link here. This is literally the optimizing profiling settings doc. It talks about at a high level the different points we already covered. But I want to focus on this last bit, which is the symbol setting section. This you can access right within Visual Studio, which is debug option symbols. If you go through that pathway in the context menu, you'll get to this page. Essentially, symbols can give you information that can help you with investigating exception issues or allocation issues, but they have a significant impact on how long it takes to generate results for the tools. What's happening in this particular menu, is that we have symbol file PDB locations. PDB files are essentially where the symbols are stored, and essentially, the symbols are very expensive to load, so what we try to do is cache them as much as possible, so you're not having to constantly reload them. However, over time, sometimes symbols can really slow things down. If you're struggling to load this, essentially what you need to do is make sure that you might want to consider turning off like some of these symbol server. In this particular picture, these symbol servers are off, but you might want to also empty the symbol cache. For the profiler, or the way it's designed right now, regardless of your symbol loading preference here, it always has to load all symbols, which can be pretty taxing. But sometimes you want to just rely on local symbols, and not have to load all this stuff. Again, maybe this is not the first place to look for optimizing settings, but something to consider. Check out our documentation, plugging it here again. But that's the last one. >> We technically talked about two different tools, one being the performance profiler and the other being the diagnostics tools window, but each of those windows had many tools within those larger windows. What is the biggest takeaway you want viewers to get from this very broad tour of those two major tools that we're going to dive into in later parts? >> To your point, that they feel we have a pretty comprehensive tool set. We have a lot of options for you, and hopefully you feel that regardless of the nature of your performance investigation, we have some tool for you somewhere within the diagnostics tool window or the performance profiler. If you feel like we don't, we definitely love to hear your feedback and work on that. We're constantly trying to make sure we have a very comprehensive experience. Absolutely would love to hear that feedback too. Also the fact that not just we have a bunch of tools, but you can use them in tandem. We saw in the performance profiler, whether it's something like checking multiple boxes, and running a few tools side-by-side. We saw with the diagnostics tool window bridging the gap between the debugging world and the profiling world. Using either just multiple of those tools together with the CPU usage, and memory usage tool in that window with time filtering, or just breakpoints go into the CPU usage tool. Essentially, to recap, the big takeaway is hopefully you feel we have a lot of tools that work well for you, and that you can use them in tandem, and that you feel we have adequate documentation, you can optimize the settings to your need, of course. >> That's great. From there, when we get to our next part, just as a mini teaser, what are we going to talk about? >> Absolutely. With this episode, it was all about tools and a little bit tipsy here and there with settings. What we want to talk about next though is how do you interact with these tools outside of VS, and also taking this to the next level. How do we profile in production? I think that's definitely a question that comes up a lot, and it's very important for obvious reasons. A lot of developers work in production environments, and they want to figure out how do we use our tools, not just within the context of VS itself, but also outside as well. Our great colleague Esteban is going to be working on that next episode, and so excited that. But we'll be getting to that next. >> Sounds fun. Thanks for joining me once again, Sagar. >> Great to be here, Leslie. Thanks for having me. >> Hopefully, everybody has been enjoying this series so far, and is ready to take their profiling to the next level. Join us next time for part three. Until then, happy coding. [MUSIC]
Info
Channel: Microsoft Visual Studio
Views: 7,514
Rating: undefined out of 5
Keywords:
Id: HHrNogCGxIk
Channel Id: undefined
Length: 35min 26sec (2126 seconds)
Published: Thu Jul 23 2020
Related Videos
Note
Please note that this website is currently a work in progress! Lots of interesting data and statistics to come.