- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我目前正在为我的 API 做基准测试,我注意到使用 EF Core 的第一次保存操作有点延迟。这种情况是在一段时间不活动后(假设 18 小时),第一个保存操作需要 1.5 秒才能执行,随后最多为 100 毫秒。下面是代码片段,
public async Task SaveLog(Log log_item)
{
// Set created and updated date/time
log_item.created = DateTime.UtcNow;
log_item.updated = DateTime.UtcNow;
if (!(log_item.Month % 2 == 0))
// Odd
{
var log_item_odd = log_item.ConvertLogToOdd();
await _dbContext.Log_Odd.AddAsync(log_item_odd);
}
else
// Even
{
var log_item_even = log_item.ConvertLogToEven();
await _dbContext.Log_Even.AddAsync(log_item_even);
}
await _dbContext.SaveChangesAsync();
}
以下是此操作的执行时间,以及对我捕获的日志执行的后续更新,以毫秒为单位。
[2018-12-29 06:25:00.199] [ADD_LOG] SaveLog 1556
[2018-12-29 06:25:01.056] [UPDATE_LOG] UpdateLog 362
[2018-12-29 06:27:13.652] [ADD_LOG] SaveLog 4
[2018-12-29 06:27:13.886] [UPDATE_LOG] UpdateLog 9
[2018-12-29 06:29:01.633] [ADD_LOG] SaveLog 4
[2018-12-29 06:29:01.846] [UPDATE_LOG] UpdateLog 4
[2018-12-29 06:56:21.544] [ADD_LOG] SaveLog 53
[2018-12-29 06:56:21.996] [UPDATE_LOG] UpdateLog 5
[2018-12-29 07:11:58.813] [ADD_LOG] SaveLog 94
[2018-12-29 07:11:59.051] [UPDATE_LOG] UpdateLog 5
[2018-12-29 07:16:12.241] [ADD_LOG] SaveLog 3
[2018-12-29 07:16:12.639] [UPDATE_LOG] UpdateLog 4
我找不到任何与 EF Core 在一段时间不活动后需要一些时间启动相关的内容,对此有解释吗? *我使用 PostgreSQL 作为数据库。
感谢任何帮助,谢谢。
最佳答案
通常所有的提供者都有一些实现来在一段时间的空闲时间后修剪空闲连接。
第一个命令需要更多时间来创建和打开连接。下一个命令将使用池连接,并且速度更快。然后,在空闲特定时间后,提供商会修剪池并关闭空闲连接。然后在空闲时间之后的下一个命令需要打开一个连接,这再次需要时间。
例如 Npgsql
, ConnectorPool
中有一个 PruneIdleConnectors
它根据 NpgsqlConnectionStringBuilder.ConnectionIdleLifetime
的值进行清理默认为 5 分钟。这里有相关pooling参数:
对于 ADO.NET SqlConnection
pooling这个时间大约是 4-8 分钟:
连接池会在连接空闲大约 4-8 分钟后从池中删除连接,或者如果池器检测到与服务器的连接已被切断。
注意:评论中也已经提到,还有一些其他因素可能会影响首次执行时间,包括 DBMS 中的 EF 上下文池和查询执行计划缓存。但通常最耗时的是重新打开连接。
关于c# - 应用程序长时间空闲后,EF Core AddAsync 和 SaveChangesAsync 稍微变慢,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53968034/
有谁知道如何覆盖 SaveChangesAsync?我知道有人发布了类似的问题,但没有答案。我在下面有以下代码: public override async Task SaveChangesAsync
这是我的表:统计 Id,Depth,RefreshCounter 示例记录: Id Depth RefreshCounter 1 1 1 2 1
在 Visual Studio 2013 中使用异步操作和 Entity Framework 支持构建新的 ApiController 时,一些方法包装 DbContext.SaveChangesAs
我想以事务方式将更改保存到数据库中的实体 Person 列表。我已经实现了该功能,但我不知道是否必须将 await Task.WhenAll(tasks); 包装在 TransactionScope
考虑以下 WebAPI 方法: [HttpPost] public async Task CreateWorkItem(Item wi) { var item = await d
我有一个表,我想在其中一次更新 100 行。我有一个用于查找特定行的 100 个 ID 的列表。找到后,我会为每一行更新一个列 (SyncOk)。 问题是更新 100 行需要大约 23 到 30 秒。
我的一个查询遇到了一个奇怪的问题。当我第一次执行它时,它起作用了,但所有后续调用都失败了 Cannot insert explicit value for identity column in tab
我想我可能在理解它应该如何工作时遗漏了一些东西。我有一些导入文件的代码。它遍历每条记录,进行一些处理,然后通过DbContext将该记录添加到表中。实例。 我初始化 DbContext像这样: pro
我正在查看一个 ASP.NET MVC 应用程序,并且有代码调用 SaveChangesAsync() 以在实体更新时保存对数据库的更改,但调用函数中的下一个语句是返回语句。根据我的理解,调用 Sav
我正在向 RavenDB 数据库中插入大量数据;大约 2500000 条记录。这需要尽可能在更短的时间内完成。 我使用一个列表来保存 SaveChangesAsync 返回的任务对象: session
发票类别实体: public class InvoiceCategory { [Key] Public int InvoiceCategoryID { get; set; }
Mock dbContext; [TestFixtureSetUp] public void SetupDbContext() { dbContext = new Mock(); db
我的应用程序中有这个功能。如果 Phrase 的插入失败,那么有人可以告诉我是否仍然添加了 Audit 条目吗?如果是这种情况,那么有没有一种方法可以将这些打包成一个可以回滚的事务。 此外,如果它失败
我正在实现审计表并覆盖 savechangesasync,但我需要检索用户标识,但我无法访问上下文类中的 HttpContextAccessor,因为它在解决方案的另一个项目中,我想将其作为savec
我正在实现审计表并覆盖 savechangesasync,但我需要检索用户标识,但我无法访问上下文类中的 HttpContextAccessor,因为它在解决方案的另一个项目中,我想将其作为savec
我的场景是这样的 //a lot of database dependant processing db.SaveChangesAsync(); //asynchronouly saving data
我正在尝试在 ASP.NET Core 应用程序中使用 Entity Framework Core Identity 我已经创建了 Database Context 及其接口(interface),如
我们遇到了 Entity Framework 的一个奇怪问题。我们正在尝试向数据库中添加一个新对象,并且是从几个不同的位置进行的。两者都使用通过 nuget 包加载的以下代码: public asyn
需要一个集中的解决方案来获取持久保存到 Db 的结果 Entity,可能在 SaveChangesAsync() 和 SaveChanges() 方法中我的 DbContext 或通过事件监听器。 需
private async void button4_Click(object sender, EventArgs e) { try {
我是一名优秀的程序员,十分优秀!