- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个应用程序,我在其中验证了以下行为:长时间不活动后的第一个请求需要很长时间,有时会超时。是否可以控制 Entity Framework 如何管理对象的处置?是否有可能将某些实体标记为永远不会被处置?...为了避免/改善预热时间?
问候,
最佳答案
类似查询的响应时间会缩短的原因是多方面的。
Teachers with their Students
,则Teachers
表将与Students
表连接。此连接结果通常会缓存一段时间。 Teachers with their Students
的下一个查询将重用此连接结果,从而变得更快DbContext
缓存查询对象。如果您选择一个Single
老师,或Find
一个,它会保存在本地内存中。这是为了能够在您调用 SaveChanges
时检测到更改了哪些项目。如果您再次Find
相同的Teacher
,这个查询会更快。如果您查询 1000 个 Teachers
,我不确定是否会发生同样的情况。DbContext
对象时,会检查初始化程序以查看模型是否已更改。因此,不 Dispose()
创建的 DbContext
似乎是明智的,但您会看到大多数人保持 DbContext
存活一段时间相当短的时间:
using (var dbContext = new MyDbContext(...))
{
var fetchedTeacher = dbContext.Teachers
.Where(teacher => teacher.Id = ...)
.Select(teacher => new
{
Id = teacher.Id,
Name = teacher.Name,
Students = teacher.Students.ToList(),
})
.FirstOrDefault();
return fetchedTeacher;
}
// DbContext is Disposed()
乍一看,让 DbContext
保持事件状态似乎更好。如果有人请求相同的 Teacher
,DbContext
就不必向数据库请求它,它可以返回本地 Teacher..
但是,让 DbContext
保持事件状态可能会导致您获得错误的数据。如果其他人在您对该 Teacher
的第一次和第二次查询之间更改了 Teacher
,您将获得旧的 Teacher
数据。
因此,明智的做法是让 DbContext
的生命周期尽可能短。
有什么办法可以提高第一次查询的速度吗?
是的,你可以!
您可以做的第一件事就是设置数据库的初始化,这样它就不会检查数据库的存在和模型。当然,只有当您相当确定您的数据库存在并且没有更改时,您才能这样做。
// constructor; disables initializer
public SchoolDBContext() : base(...)
{
//Disable initializer
Database.SetInitializer<SchoolDBContext>(null);
}
另一件事可能是,如果你已经获取了你的对象来更新数据库,并且你确定没有其他人更改了该对象,你可以附加
它,而不是再次获取它, as is shown in this question
正常使用:
// update the name of the teacher with teacherId
void ChangeTeacherName(int teacherId, string name)
{
using (var dbContext = new SchoolContext(...))
{
// fetch the teacher, change the name and save
Teacher fetchedTeacher = dbContext.Teachers.Find(teacherId);
fetchedTeader.Name = name;
dbContext.SaveChanges();
}
}
使用 Attach
更新之前获取的 Teacher:
void ChangeTeacherName (Teacher teacher, string name)
{
using (var dbContext = new SchoolContext(...))
{
dbContext.Teachers.Attach(teacher);
dbContext.Entry(teacher).Property(t => t.Name).IsModified = true;
dbContext.SaveChanges();
}
}
使用此方法不需要再次获取教师。在 SaveChanges 期间,检查所有 Attached
项目的所有属性的 IsModified
值。如果需要,它们将被更新。
关于entity-framework - 是否可以改善 EF6 预热时间?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52587331/
阅读文档时:https://learn.microsoft.com/en-us/azure/app-service/deploy-staging-slots#swap-operation-steps
我正在使用 Leiningen 在 Clojure 中创建一个项目。我必须对这个项目进行基准测试。我开始明白我必须预热我的 JVM。我已经进行了提前编译,这是否意味着我不必预热我的 JVM? 我知道调
我们有一个 Kubernetes 服务,其 pod 需要一些时间来预热第一个请求。基本上,第一个传入请求将从 Redis 读取一些缓存值,这些请求可能需要更长的时间来处理。当这些新创建的 pod 准备
我正在尝试消除(或至少最小化)我的 .NET 应用程序的启动/预热时间。尽管这是一个普遍关注的问题,但我不太确定如何做到这一点。 关于 .NET 应用程序启动缓慢的问题有很多。这些很容易通过池回收、工
如何预热 Maven 测试的依赖缓存?例如。 mvn test -DskipTests 下载一些依赖项,但不是全部,例如一些 maven surefire 插件依赖项只能通过 mvn test 下载。
如果我正在设计排序算法测试,我可以这样做以避免 JVM 预热吗?谢谢! double count = 0; double start, end; for(int r = 0; r < warmup;
我想要一个 java 应用程序,它运行 Scalabench 的不同基准测试.我想确保 JVM 在开始测量基准运行时长之前已预热。我应该如何从我的 Java 应用运行这些基准测试? 我想到的第一件事是
除了使用以下命令外,还有其他方法可以预热 PIOPS EBS 卷吗? sudo dd if=/dev/xvdf of=/dev/null bs=1M 随着 EBS vol 的大小增加,上述命令似乎需要
此消息来源说初始化: https://support.microsoft.com/en-us/help/2843964/application-initialization-module-fails-
我们已经使用 IIS 7.5 的应用程序初始化模块已经有一段时间了,它总是工作得很好。 但是,我们刚刚开始实现 SSL,它似乎与热身产生了冲突。我已经做了很多研究,但到目前为止还没有解决方案。 基本上
我试图使用IIS 7.5应用程序初始化扩展为我的Web应用程序配置预热过程。我正在采用这种方法来最大程度地减少由应用程序池回收引起的速度下降,这是一个问题。 我想要的是在不重新映射其他任何请求的情况下
我有一个托管在 IIS 上的 .net core (3.1) Web 应用程序。我无法弄清楚如何在第一个请求之前运行一段代码。我已完成以下操作: 设置应用池的“启动模式”=“AlwaysRunning
我有一个托管在 IIS 上的 .net core (3.1) Web 应用程序。我无法弄清楚如何在第一个请求之前运行一段代码。我已完成以下操作: 设置应用池的“启动模式”=“AlwaysRunning
我是一名优秀的程序员,十分优秀!