- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
不,我的第二个问题的答案不是冬天。
前言:
我最近对 Entity Framework 做了很多研究,一直困扰我的是它在查询未预热时的性能,即所谓的冷查询。
我浏览了performance considerations Entity Framework 5.0 的文章。作者介绍了暖查询和冷查询的概念以及它们的区别,我自己也在不知道它们存在的情况下注意到了它们。在这里可能值得一提的是,我背后只有六个月的经验。
现在我知道如果我想在性能方面更好地了解框架,我可以额外研究哪些主题。不幸的是,互联网上的大多数信息都已经过时或主观性臃肿,因此我无法找到有关“热查询”与“冷查询”主题的任何其他信息。
到目前为止,我基本上注意到的是,每当我必须重新编译或回收命中时,我的初始查询都会变得非常慢。正如预期的那样,任何后续数据读取都很快(主观)。
我们将迁移到 Windows Server 2012、IIS8 和 SQL Server 2012,作为一名初级学生,我实际上为自己赢得了先于其他人测试它们的机会。我很高兴他们引入了一个预热模块,该模块将使我的应用程序为第一个请求做好准备。但是,我不确定如何继续预热我的 Entity Framework 。
我已经知道值得做的事情:
我认为按照常识去做,可能是错误的方法:
问题:
最佳答案
您可以混合使用预生成的 View 和静态编译的查询。
静态CompiledQuerys之所以好,是因为它们编写起来又快又容易,并且有助于提高性能。但是,对于 EF5,无需编译所有查询,因为 EF 会自动编译查询本身。唯一的问题是,当缓存被清除时,这些查询可能会丢失。因此,您仍然希望保留对您自己编译的查询的引用,这些查询只发生非常罕见,但代价高昂。如果您将这些查询放入静态类中,它们将在第一次需要时被编译。这对于某些查询来说可能为时已晚,因此您可能希望在应用程序启动期间强制编译这些查询。
正如您提到的,预生成 View 是另一种可能性。特别是对于那些需要很长时间才能编译并且不会改变的查询。这样您就可以将性能开销从运行时转移到编译时。而且这不会引入任何滞后。但当然这个变化会传递到数据库,所以处理起来并不那么容易。代码更加灵活。
不要使用大量 TPT 继承(这是 EF 中的一般性能问题)。继承层次结构既不要太深也不要太宽。仅特定于某个类的 2-3 个属性可能不足以需要自己的类型,但可以作为现有类型的可选(可为空)属性进行处理。
不要长时间坚持单一上下文。每个上下文实例都有自己的一级缓存,随着它变大,性能会降低。上下文创建很便宜,但上下文的缓存实体内的状态管理可能会变得昂贵。其他缓存(查询计划和元数据)在上下文之间共享,并将与 AppDomain 一起消亡。
总而言之,您应该确保频繁分配上下文并仅在短时间内使用它们,您可以快速启动应用程序,编译很少使用的查询,并为性能关键的查询提供预生成的 View ,并且经常使用。
基本上,每次您丢失 AppDomain 时。 IIS 每隔 29 hours 执行一次重新启动,因此您永远无法保证您会拥有实例。此外,一段时间没有事件后,AppDomain 也会关闭。你应该尝试再次快速上来。也许您可以异步执行一些初始化(但要注意多线程问题)。您可以使用计划任务,在没有请求时调用应用程序中的虚拟页面,以防止 AppDomain 死亡,但它最终会死亡。
我还假设当您更改配置文件或更改程序集时,将会重新启动。
关于asp.net - 如何 "warm-up" Entity Framework ?什么时候得到 "cold"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13250679/
我正在处理 Java 中的多线程,正如有人向我指出的那样,我注意到线程会预热,也就是说,它们会随着重复执行而变得更快。我想了解为什么会发生这种情况,是否与 Java 本身有关,或者它是否是每个多线程程
我 build 了我的第一个 渐进式网页应用 (PWA) 在 react js 中。当我点击 生成报告 在 DevTools 中 Chrome 的审核选项卡上,它显示消息灯塔正在永远升温。 我的 ch
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 9 年前。 Improv
我目前正在 MATLAB 中编写一个函数,它有两个步骤: 它处理一些数据 它对处理后的数据进行一些计算 我正在使用该函数运行一系列实验,其中我调整了步骤 2) 中的计算方式。 看到我如何处理大型数据集
我最近深入研究了内存以及如何正确使用它。当然,我也偶然发现了预取以及如何让 CPU 的工作更轻松。 我运行了一些基准测试以了解正确存储/访问数据和指令的实际好处。这些基准测试不仅显示了帮助您的 CPU
我想知道是否有人有任何插件或 capistrano 配方可以通过在部署时或在本地部署之前构建所有页面缓存的 html 来“预热”rails 应用程序的页面缓存。 我有一些主要是静态的网站,它们变化不大
我正在支持需要低延迟(处理每条消息的时间小于 300 微秒)的 Java 消息传递应用程序。但是,我们的分析表明,Sun Java 虚拟机一开始运行缓慢,在前 5,000 条左右消息后加速。前 5,0
我最近阅读 this paper它引入了一个称为“预热”(WU)的过程,该过程包括将 KL 散度中的损失乘以一个变量,该变量的值取决于 epoch 的数量(它从 0 到 1 线性演化) 我想知道这是否
关闭。这个问题不满足Stack Overflow guidelines .它目前不接受答案。 想改善这个问题吗?更新问题,使其成为 on-topic对于堆栈溢出。 6年前关闭。 Improve thi
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎与 help center 中定义的范围内的编程无关。 . 已关闭 2 年前。 已锁定。这个问题
长话短说 有没有办法判断我们的 celery worker 是否进入热关机状态?换句话说,我可以检查是否有待处理的 SIGTERM 吗?我有一个重新安排自己的任务,但我想避免在有等待关闭的情况下重新安
我注意到我第一次运行脚本比第二次和第三次花费的时间要多得多1。提到“热身”in this question没有解释。 为什么代码“预热”后运行速度更快? 我没有在两次调用之间清除所有2,但是每次函数调
我启用了 Warming Requests在我的应用程序中,在 app.yaml 中添加以下指令。 inbound_services: - warmup 查看应用程序的日志,我看到了几个此类条目: 1
我注意到,当我在 Go HTTP 服务器的上下文中计时 JSON 解码时,即使是小对象也需要 30,000+ 纳秒。这对我来说似乎很大,所以我运行了一些独立的基准测试,结果令人惊讶地显示每次解码的平均
下面的代码运行完全相同的计算 3 次(它做的不多:基本上是从 1 到 100m 的所有数字相加)。前两个 block 的运行速度比第三个快大约 10 倍。我已经运行了这个测试程序 10 多次,结果显示
我正在使用以下内容来缓存使用 memcached 的慢速加载页面: caches_action :complex_report, :expires_in => 1.day Controller 操作受
我看到了“预热”EC2 以克服首次写入惩罚的建议:- Warm up data partitions - There is one drawback to using disk IO in EC2:
我有一个 ASP.NET MVC 3/.NET Web 应用程序,它很大程度上是数据驱动的,主要围绕“位置”的概念(纽约、加利福尼亚等)。 p> 无论如何,我们有一些非常繁忙的数据库查询,它们在完成后
我注意到,如果我调用一次 Calendar.getInstance(),在我真正需要 Calendar 实例之前,第二次调用的性能会提高。 Calendar calendar = Calend
我有一个像这样的色轮: https://stackoverflow.com/a/16735555/5226245 现在我试图只绘制“暖色”,并只用这些颜色替换整个轮子。例如:我想要颜色从 45° 到
我是一名优秀的程序员,十分优秀!