你是否在排查运行缓慢的 web 应用程序时怀疑是数据库层造成的?以前排查数据库层需要特定的工具,现在可以使用 Visual Studio 的 Performance Explorer 中的数据库分析工具快速而轻松地排查。

  当谈到诊断 web 应用程序的性能时,我们在与开发人员的数十次交谈中了解到,应用程序的数据库层通常是导致应用程序运行缓慢的主要原因。然而,大多数解决方案都需要安装单独的工具、收集大量的SQL跟踪或修改应用程序代码来获得所需的信息。

  为了使这个过程不那么繁琐和复杂,我们在 Visual Studio 的 Performance Profiler 中开发了 Database tool,以帮助你深入了解应用程序的数据库层。你可以确切地看到在应用程序执行期间发生了哪些数据库活动的有用信息,比如哪些查询和事务运行的时间最长,每个查询使用的连接字符串,以及可能最重要的是,这些查询在代码中的何处生成。

  下面看一个简单示例,了解如何使用该工具定位代码与数据库交互的位置,并对其进行性能改进。

使用工具

  以微软的 eShopOnWeb 为例,本地部署后运行站点,并花点时间加一些商品到购物车。

  即使使用浏览器的开发人员工具,也无法准确地识别数据库查询什么时候发生,或者它是否会在操作(如上图所示的筛选目录)期间造成延迟。使用 Database tool,我们可以捕获在任何用户操作期间发生的确切数据库活动,并进行进一步研究。

  要做到这一点,我们只需打开 Performance Profiler,在Visual Studio 中通过点击 Debug > Performance Profiler 或使用快捷键 Alt + F2 打开,然后勾选“Database”复选框来启用该工具。要获得更准确的配置,需要以 Release 配置而不是 Debug 运行应用程序。然后单击 Start 启动并开始分析应用程序。

  以你感兴趣的方式与你的应用程序进行交互,然后当你准备检查数据时,单击 Visual Studio 中的“Stop Collection”。

  在收集停止后,Visual Studio 将快速处理收集到的数据,并生成一个图表,显示在分析会话期间发生的查询,以及发生查询的时间和数量。右键点击任何列标题,将显示可以帮助你排序和分析所记录的活动的可用列。这样可以非常快速地发现异常,比如只影响少数记录的长时间运行的查询,或者使用错误连接字符串的查询。

  在确定了需要进一步研究的查询之后,想要查找该查询在代码中的何处发生,只需右键点击该行并选择“Go To Source File”。

  只要有可能,该工具就会立即得到执行查询的代码行或代码块,从而省去了挖掘复杂代码库的繁琐任务。

试一试

  这个特性可以在 Visual Studio 2019 16.3 或更高版本中找到,并且支持使用 ADO.NET 或 Entity Framework Core 的 .NET Core 项目。这个工具还支持 dotnet trace,这意味着我们可以在 .NET Core 运行的任何地方收集数据(包括Linux!),并在 Visual Studio 中分析这些数据。

原文链接

  https://devblogs.microsoft.com/visualstudio/database-profiling-with-visual-studio/

【译】Database Profiling with Visual Studio的更多相关文章

  1. .NET Memory Allocation Profiling with Visual Studio 2012

    .NET Memory Allocation Profiling with Visual Studio 2012 This post was written by Stephen Toub, a fr ...

  2. Solve: Your project references the latest version of Entity Framework (for MySQL) in Visual Studio 2013

    The error message while trying to create a ADO.net Entity Data Model ( Entity Framework 6 ) for MySq ...

  3. Miscosoft Visual Studio项目guid取值

    There isn't an easy way to change the type of a project in Visual Studio project once it is created; ...

  4. [转]Visual Studio 项目类型 GUID 清单

    转自:https://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs Complete li ...

  5. [转]List of Visual Studio Project Type GUIDs

    本文转自:http://www.codeproject.com/Reference/720512/List-of-Visual-Studio-Project-Type-GUIDs There isn' ...

  6. 【译】Visual Studio 15 预览版更新说明

    序:恰逢Build2016大会召开,微软发布了VS2015的update2更新包和VS2016预览版.本人正在提升英文水平中,于是在这里对VS2016预览版的官方文档进行了部分翻译.因为VS有些功能使 ...

  7. Visual Studio 2012创建SQL Server Database Project提示失败解决方法

    新建一个SQL Server Database Project,提示: Unable to open Database project This version of SQL Server Data ...

  8. 【广州.NET社区推荐】【译】Visual Studio 2019 中 WPF & UWP 的 XAML 开发工具新特性

    原文 | Dmitry 翻译 | 郑子铭 自Visual Studio 2019推出以来,我们为使用WPF或UWP桌面应用程序的XAML开发人员发布了许多新功能.在本周的 Visual Studio ...

  9. 项目管理实践【六】自动同步数据库【Using Visual Studio with Source Control System to synchronize database automatically】

    在上一篇项目管理实践[五]自动编译和发布网站中,我们讲解了如何使用MSBuild+Robocopy+WebDeployment来自动编译和部署网站,今天,我们来看一下,如何使用MSBuild +SVN ...

随机推荐

  1. redis 之 持久化

    Redis支持RDB和AOF两种持久化机制,持久化功能有效地避免因进程退出造成的数据丢失问题,当下次重启时利用之前持久化的文件即可实现数据恢复. 1.RDB持久化 RDB持久化是指在指定的时间间隔内将 ...

  2. 什么是 A/B 测试?

    1.什么是A/B 测试?有什么用? 做过App功能设计的读者朋友可能经常会面临多个设计方案的选择,例如某个按钮是用蓝色还是黄色,是放左边还是放右边. 传统的解决方法通常是集体讨论表决,或者由某位专家或 ...

  3. Python File seek() 方法

    概述 seek() 方法用于移动文件读取指针到指定位置.高佣联盟 www.cgewang.com 语法 seek() 方法语法如下: fileObject.seek(offset[, whence]) ...

  4. 7.9 NOI模拟赛 C.走路 背包 dp 特异性

    (啊啊啊 什么考试的时候突然降智这题目硬生生没想出来. 容易发现是先走到某个地方 然后再走回来的 然后在倒着走的路径上选择一些点使得最后的得到的最多. 设\(f_{i,j}\)表示到达i这个点选择的价 ...

  5. SET DYNAMICS 365 COLORS AND LOGO USING THEMES

    https://carldesouza.com/dynamics-365-colors-logo-themes/ BEFORE WE START, I NEED YOUR HELP. I AM SPE ...

  6. TF上架模式是什么?有什么作用?

    TF上架模式中的TF上架就是TestFlight上架的意思,意思就是将开发者开发完成的App在苹果官方内测商店TestFlight上架的模式,一般被我们简称为TF上架模式. 为什么要了解TF上架呢?为 ...

  7. (恐怕是)写得最通俗易懂的一篇关于HashMap的文章——xx大佬这样说

    先看再点赞,给自己一点思考的时间,微信搜索[沉默王二]关注这个有颜值却假装靠才华苟且的程序员. 本文 GitHub github.com/itwanger 已收录,里面还有一线大厂整理的面试题,以及我 ...

  8. JAVA的基本程序设计结构(下)

    字符串 Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,叫做 String. String e=""; //an empty String String ...

  9. 037_go语言中的互斥锁

    代码演示: package main import ( "fmt" "math/rand" "runtime" "sync&quo ...

  10. 解惑4:java是值传递还是引用传递

    一.概述 曾经纠结了很久java的参数传递方式是什么样的,后面粗略的了解了一鳞半爪以后有了大概的印象:"传参数就是值传递,传对象就是引用传递",后面进一步查找了相关资料和文章以后, ...