摘要: 最近遇到一个非常诡异的问题,在一个 ASP.NET Core 2.2 项目中,从 SQL Server 数据库查询 100 条数据记录,会出现 16-22s 左右的延迟。延迟出现在执行 SqlDataReader 的 ReadAsync 方法时,在一行一行读取数据时,读取某些行时会出现 2-3s 的延迟。阅读全文
posted @ 2019-04-22 12:05 dudu 阅读(46) 评论(2) 编辑
摘要: 最近在排查一个奇怪的 EF Core 查询速度慢的问题,需要在 corefx 2.2.3 的 System.Data.SqlClient 源码中打点。github 上签出 corefx 的源代码,运行 build.cmd 命令,然后用 VS2017 打开 System.Data.SqlClient.sln ,添加 Console.WriteLine 打点代码,用 VS 进行 build 。阅读全文
posted @ 2019-04-13 17:27 dudu 阅读(77) 评论(0) 编辑
摘要: 最近遇到了一个 EF Core 的恐怖问题,在添加数据时竟然会自动删除数据库中已存在的数据,经过追查发现是一个多余的实体关系配置引起的。罪魁祸首就是上面的 `WithOne()` 。今天写了个非常简单的控制台程序重现了这个问题。阅读全文
posted @ 2019-03-28 16:39 dudu 阅读(114) 评论(0) 编辑
摘要: 在前两天遇到 .NET Core 中 EF Core 的异步与同步查询的百倍性能之差之后,这两天又遇到了 `AutoMapper ProjectTo` 与 `Mapster ProjectToType` 的百倍性能之差。问题是在昨天发现的,使用 `AutoMapper ProjectTo阅读全文
posted @ 2019-02-28 13:45 dudu 阅读(360) 评论(5) 编辑
摘要: 这两天遇到一个奇怪的问题,通过 EF/EF Core 查询数据库速度奇慢,先是在传统的 ASP.NET 项目中遇到(用的是EF6.0),后来将该项目迁移至 ASP.NET Core 也是同样的问题(用的是EF Core 2.2.2)。 问题触发的条件是所查询的字段中存储了很大的字符串(有400多万个阅读全文
posted @ 2019-02-23 16:29 dudu 阅读(417) 评论(7) 编辑
摘要: DbContextPool 是 ASP.NET Core 2.1 引入的新特性,可以节省创建 DbContext 实例的开销,但没有想到其中藏着一个小坑。最近有一个 ASP.NET Core 项目持续运行一段时间后日志中就会出现数据库连接池达到最大连接数限制的错误阅读全文
posted @ 2019-02-18 22:05 dudu 阅读(584) 评论(6) 编辑
摘要: 这是今天在实际项目中遇到的一个问题,EF Core 2.2 生成了下面的 SQL 语句,INNER JOIN 部分丑陋的 SQL 语句让人无法忍受。使用的是标准的一对多(one-to-mant)映射关系,在其他项目都能生成赏心悦目的 SQL 语句,唯独今天这个项目中不行。阅读全文
posted @ 2018-12-18 17:44 dudu 阅读(290) 评论(1) 编辑
摘要: 在 .NET Framework 与 .NET Core 中 HttpClient 有个臭名昭著的问题,HttpClient 实现了 IDispose 接口,但当你 Dispose 它时,它不会立即关闭所使用的 tcp 连接,而是将 tcp 连接置为 TIME_WAIT 状态,240秒(4分钟)后才真正关闭连接。对于高并发的场景,比如每秒 1000 个请求,每个请求都用到 HttpClient阅读全文
posted @ 2018-10-31 16:30 dudu 阅读(1933) 评论(14) 编辑
摘要: 在我们 2015 年开始的从 .NET Framework 向 .NET Core 迁移的工程中,遇到的最大的坑就是标题中所说的——同步方法中调用异步方法发生”死锁”。虽然在 .NET Framework 时代就知道不能在同步方法中调用异步方法,但我们却明知路有坑,偏向此路行。不是我们自讨苦吃,而是被迫无奈阅读全文
posted @ 2018-10-29 10:54 dudu 阅读(3874) 评论(45) 编辑
摘要: 最近在阅读 .NET Threadpool starvation, and how queuing makes it worse 这篇博文时发现文中代码中的一种 Task 用法之前从未见过,在网上看了一些资料后也是云里雾里不知其解,很是困扰。今天在程序员节的大好日子里终于想通了,于是写下这篇随笔分享给大家阅读全文
posted @ 2018-10-24 22:19 dudu 阅读(5752) 评论(42) 编辑
摘要: 接手一台跑在 Tomcat 上的 Java Web 应用的服务器,通过镜像的方式更换服务器后站点无法访问,发现是因为 Tomcat 不能在服务器启动后自动启动,于是基于 init.d 将 Tomcat 配置为以服务方式自动运行。阅读全文
posted @ 2018-10-21 17:11 dudu 阅读(219) 评论(0) 编辑
摘要: SQLite 内存数据库(in-memory database)的连接字符串是 Data Source=:memory: ,它的特点是数据库连接一关闭,数据库就会被删除。而使用 services.AddDbContext 通过连接字符串配置 EF Core 时,EF Core 会在每次查询或 SaveChanges 后立即关闭数据库连接。在这样的情况下,集成测试中就无法在向 SQLite 内存数据库写入数据库后进行查询测试。阅读全文
posted @ 2018-10-10 14:02 dudu 阅读(302) 评论(0) 编辑
摘要: .NET Core 2.0 引入了 IHostedService ,基于它可以很方便地执行后台任务,.NET Core 2.1 则锦上添花地提供了 IHostedService 的默认实现基类 BackgroundService ,在这篇随笔中分别用 Web 与 Console 程序体验一下。阅读全文
posted @ 2018-09-14 18:08 dudu 阅读(598) 评论(0) 编辑
摘要: 在 ASP.NET Core 中如果在 DataProtection 中使用了 PersistKeysToFileSystem 或 PersistKeysToFileSystem,会在日志中出现告警,这是由于 DataProtection 所用到的密钥本身没有被加密存储,要消除这个告警,需要一个专门用来加密“密钥”的密钥,首先用 openssl 命令创建密钥,得到 cnblogs.pfx 文件阅读全文
posted @ 2018-09-05 16:05 dudu 阅读(568) 评论(1) 编辑
摘要: 实际应用场景是将用户上传的文件依次保存到阿里云 OSS 与腾讯云 COS ,实现方式是在启用 Request.EnableRewind() 的情况下通过 Request.Body 读取流,并依次通过 2 个 StreamContent 分别上传到阿里云 OSS 与 腾讯云 COS ,在集成测试中可以正常上传,而部署到服务器上通过浏览器上传却出现了奇怪的问题阅读全文
posted @ 2018-08-26 17:25 dudu 阅读(394) 评论(3) 编辑
摘要: 这两天在一个 ASP.NET Core 项目中遭遇了 AutoMapper ProjectTo 不起作用的奇怪问题,虽然在 ProjectTo 中指定了 DTO ,但 EF Core 生成的 SQL 语句还是 SELECT 了实体类的所有字段(除了在 EF Core 映射配置中忽略的字段),而期望的是至 SELECT DTO 中的字段。阅读全文
posted @ 2018-08-15 18:00 dudu 阅读(258) 评论(0) 编辑
摘要: 我们基于 Razor Class Library 实现了自定义错误页面的公用类库(详见之前的随笔),但是在实际使用时发现如果在 middleware 中发生了异常,则不能显示自定义错误页面,而是返回默认的 500 空白页面。当 middleware 中产生异常时,在去往自定义错误页面的途中,又途径异常 middleware ,从而让自定义错误页面也产生了异常阅读全文
posted @ 2018-08-06 18:10 dudu 阅读(207) 评论(3) 编辑
摘要: 最近在加强持续集成,遇到一个场景需要通过 gitlab-ci 环境变量(Settings -> Settings -> CI/CD -> Variables )在持续集成时向 ASP.NET Core 应用传递配置。ASP.NET Core 默认就启用了从环境变量读取配置,在 WebHost.CreateDefaultBuilder() 中包含了 config.AddEnvironmentVariables() ,只要用正确的格式传递配置,就能搞定。阅读全文
posted @ 2018-08-05 11:42 dudu 阅读(150) 评论(0) 编辑
摘要: 被这个问题困扰很久了,用 dotnet test 命令运行 xUnit.net 测试项目时,测试代码中的 Console.WriteLine() 输出的内容在控制台总是不显示。之前一直以为是 xunit runner 屏蔽了控制台的输出,昨天在博问进行了提问 —— 请问 xUnit 在 .NET Core 中是如何屏蔽控制台输出的,今天在 xUnit 的源代码中苦苦搜寻阅读全文
posted @ 2018-07-30 18:30 dudu 阅读(289) 评论(1) 编辑
摘要: 问题来自博问的一个提问 .net core 多线程数据保存的时候DbContext被释放 。TCPService 通过构造函数注入了 ContentService , ContentService 的实例依赖了 AppDbContext (继承自 EF Core 的 DbContext)。在 TCPService 中通过 Thread.Start 启动了一个新的线程执行了 TCPService 中的 Receive 方法阅读全文
posted @ 2018-07-23 11:46 dudu 阅读(578) 评论(4) 编辑