我正在开发一个使用最新 .NET 8 的 API 项目,该项目使用 EF Core 连接到远程数据库。与数据库的初始连接大约需要 21 秒。同样的方法还可以连接到另外 2 个数据库,它们非常快~200 毫秒。
我做了哪些故障排除?
我进行了一些谷歌搜索,了解到 .NET Core 和 .NET Framework 处理连接字符串的方式是不同的。当我从连接字符串中删除端口号时,速度非常快。
更新 1 - 我最初认为从连接字符串中删除默认端口可以加快速度。但经过进一步测试,绝对不是这样的。
这是我从控制台应用程序测试的示例代码。
using System.Data.SqlClient;
using System.Diagnostics;
var stopwatch = new Stopwatch();
stopwatch.Start();
Console.WriteLine("##############Starting database call.##################");
var connectionString = "Data Source=prod-***********,1433;Initial Catalog=vspp_3;User ID=**************;Password=************; TrustServerCertificate=True; Connect Timeout=30;";
using (var connection = new SqlConnection(connectionString))
{
connection.Open();
using (var command = new SqlCommand("SELECT TOP 1 * FROM wb_old", connection))
{
var reader = command.ExecuteReader();
if (reader.Read())
{
Console.WriteLine("Successfully queried the database.");
}
else
{
Console.WriteLine("Query executed, but no data was returned.");
}
}
}
Console.WriteLine($"############################Completed database call in {stopwatch.ElapsedMilliseconds}ms #################");
Console.ReadLine();
我很想知道为什么它在 .NET Core 中运行缓慢而在 .NET Framework 中运行良好?
有趣的是,在 .NET Core 中与数据库的连接很慢,但在 .NET Framework 中却很快。这可能是由于两个框架处理数据库连接的方式或它们优化和缓存连接信息的方式不同所致。
您还可以尝试以下一些故障排除步骤:
检查运行.NET Core代码的机器和数据库服务器之间的网络配置或防火墙是否存在差异。某些网络设置可能会影响连接速度。
查看数据库服务器中可能导致 .NET Core 连接速度下降的任何特定功能或配置。
尝试运行网络跟踪或调试代码,以查看 .NET Core 中的连接过程中是否存在任何特定瓶颈或延迟。
尝试更新 EF Core 版本或使用不同的 EF Core 配置,看看是否对连接速度有任何影响。
考虑联系 EF Core 开发团队或在社区论坛中发帖,看看其他人是否遇到过类似的问题,并有任何关于优化 .NET Core 中的连接速度的建议。
总体而言,彻底调查和了解 .NET Core 和 .NET Framework 在连接数据库方面的行为差异非常重要,以确定速度下降的根本原因,并可能找到提高 .NET 连接速度的解决方案核心。