一、内存缓存(Memory Caching)

1. 具体的原理

内存缓存是一种在应用程序内存中存储数据的机制,旨在减少对外部数据源的频繁访问,从而提高应用程序的性能。

在 .NET 中,MemoryCache 类提供了内存缓存的实现。它允许开发者将经常使用的数据存储在内存中,以便快速检索。

在 .NET 9 中,MemoryCache 的实现是 ConcurrentDictionary<TKey,TValue> 的包装器,提供了功能丰富的 API。

2. 设计初衷

内存缓存的设计初衷是为了提高应用程序的性能,特别是在需要频繁访问不经常变化的数据时。

通过将这些数据存储在内存中,可以减少对数据库或其他外部数据源的访问次数,从而降低延迟和资源消耗。

这对于需要高性能和快速响应的应用程序尤为重要。

3. 应用场景

内存缓存适用于以下场景:

  • 频繁读取的静态数据:例如,应用程序配置、常量列表等,这些数据不经常变化,但需要频繁读取。

  • 计算成本高的数据:一些数据的计算过程复杂且耗时,将其结果缓存可以提高性能。

  • 会话状态管理:在某些情况下,可以使用内存缓存来存储用户的会话信息。

4. 示例代码

以下是使用 MemoryCache 的示例代码:

using Microsoft.Extensions.Caching.Memory;
using System; public class CacheExample
{
private readonly IMemoryCache _cache; public CacheExample(IMemoryCache cache)
{
_cache = cache;
} public string GetOrSetCacheItem(string key)
{
if (!_cache.TryGetValue(key, out string cacheValue))
{
// 数据不在缓存中,执行获取数据的逻辑
cacheValue = "获取的数据"; // 设置缓存选项
var cacheEntryOptions = new MemoryCacheEntryOptions()
.SetSlidingExpiration(TimeSpan.FromMinutes(5)); // 设置滑动过期时间 // 将数据存储到缓存中
_cache.Set(key, cacheValue, cacheEntryOptions);
} return cacheValue;
}
}

在上述代码中,GetOrSetCacheItem 方法尝试从缓存中获取数据,如果不存在,则获取数据并将其添加到缓存中,设置滑动过期时间为 5 分钟。

二、集合(Collections)优化

1. 具体的原理

在 .NET 9 中,对集合的优化主要体现在性能提升和内存使用的改进上。

例如,对循环的优化,通过将向上计数的循环转换为向下计数的循环,减少指令数量,从而提高性能。

此外,还引入了循环中的强度降低优化,将昂贵的操作替换为更便宜的操作,减少对迭代变量的依赖。

2. 设计初衷

这些优化的设计初衷是为了提高集合操作的效率,减少不必要的计算和内存分配,从而提升应用程序的整体性能。

特别是在处理大量数据或频繁操作集合的场景下,这些优化能够显著减少 CPU 和内存的消耗。

3. 应用场景

集合优化适用于以下场景:

  • 大数据量处理:当需要处理大量数据时,优化的集合操作可以提高处理速度。

  • 高性能要求的应用:对于对性能有严格要求的应用程序,优化的集合操作可以减少延迟。

  • 实时系统:在需要实时响应的系统中,集合优化可以确保系统的及时性。

4. 示例代码

以下是一个使用向下计数循环的示例代码:

public int SumArray(int[] array)
{
int sum = 0;
for (int i = array.Length - 1; i >= 0; i--)
{
sum += array[i];
}
return sum;
}

在上述代码中,循环从数组的末尾向前遍历,减少了比较操作的指令数量,从而提高了性能。

以上是.NET 9 new features-Memory Caching 和 Collections 优化的研究和分享。

周国庆

2024/12/30

.NET 9 new features-Memory Caching 和 Collections 优化的更多相关文章

  1. OpenCL memory object 之 传输优化

    转载自:http://www.cnblogs.com/mikewolf2002/archive/2011/12/18/2291741.html 首先我们了解一些优化时候的术语及其定义: 1.defer ...

  2. ASP.NET Core 开发-缓存(Caching)

    ASP.NET Core 缓存Caching,.NET Core 中为我们提供了Caching 的组件. 目前Caching 组件提供了三种存储方式. Memory Redis SqlServer 学 ...

  3. SolrCore Initialization Failures - Max direct memory is likely too low

    org.apache.solr.common.SolrException:org.apache.solr.common.SolrException: The max direct memory is ...

  4. 内存屏障 & Memory barrier

    Memory Barrier http://www.wowotech.net/kernel_synchronization/memory-barrier.html 这里面讲了Memory Barrie ...

  5. Linux内核同步机制之(三):memory barrier【转】

    转自:http://www.wowotech.net/kernel_synchronization/memory-barrier.html 一.前言 我记得以前上学的时候大家经常说的一个词汇叫做所见即 ...

  6. Linux内核同步 - memory barrier

    一.前言 我记得以前上学的时候大家经常说的一个词汇叫做所见即所得,有些编程工具是所见即所得的,给程序员带来极大的方便.对于一个c程序员,我们的编写的代码能所见即所得吗?我们看到的c程序的逻辑是否就是最 ...

  7. 内存分配器 (Memory Allocator)

    对于大多数开发人员而言,系统的内存分配就是一个黑盒子,就是几个API的调用.有你就给我,没有我就想别的办法. 来UC前,我就是这样觉得的.实际深入进去时,才发现这个领域里也是百家争鸣.非常热闹.有操作 ...

  8. Node.js 入门手册:那些最流行的 Web 开发框架

    这篇文章与大家分享最流行的 Node.js Web 开发框架.Node 是一个服务器端 JavaScript 解释器,它将改变服务器应该如何工作的概念.它的目标是帮助程序员构建高度可伸缩的应用程序,编 ...

  9. Chapter 6 — Improving ASP.NET Performance

    https://msdn.microsoft.com/en-us/library/ff647787.aspx Retired Content This content is outdated and ...

  10. Spark 调优(转)

    Spark 调优 返回原文英文原文:Tuning Spark Because of the in-memory nature of most Spark computations, Spark pro ...

随机推荐

  1. 在 KubeSphere 中部署高可用 Redis 集群

    作者:余生大大,大数据开发工程师,云原生爱好者,KubeSphere 社区用户. 前言 Redis 是在开发过程中经常用到的缓存中间件,在生产环境中为了考虑稳定性和高可用一般为集群模式的部署. 常规部 ...

  2. 这个Linux你敢用吗?

    文中列出的命令绝对不可以运行,即使你觉得很好奇也不行,除非你是在虚拟机上运行(出现问题你可以还原),因为它们会实实在在的破坏你的系统.所以不在root等高级管理权限下执行命令是很好的习惯. 早晚有一天 ...

  3. Readme 《Machine Learning by Andrew NG》

    本文系列内容是吴恩达老师的机器学习公开课的文本对应.需要具备英文,微积分,线性代数,程序设计的基础.从第二周开始有编程作业,到第九周.总共8个作业.感谢吴恩达老师⸜₍๑•⌔•๑ ₎⸝ 2021年9月1 ...

  4. Java创建数组、赋值的四种方式,声明+创建+初始化 详解

    @ 目录 一.创建数组的四种方式 二.详解 三.数组存储的弊端 一.创建数组的四种方式 以int数据类型为例 @Test public void testNewArray() { //创建数组 //法 ...

  5. VMware使用及CentOS 7安装配置

    本文是在VMware虚拟机下安装CentOS 7的,并不是在物理机下直接安装.无论是在学习上还是工作上都建议在虚拟机安装Linux系统来进行实验.这样就算实验失败,或者系统崩溃.只需要使用虚拟机的快照 ...

  6. vue-element-admin 左侧的导航栏固定展开

    项目需要把左侧的导航栏固定打开,不关闭我们只需要打开store-modules-app.js文件中,把下面的代码给修改就可以了

  7. 基于 .NET 的开源工作流引擎框架

    前言 工作流管理成为了提高应用灵活性和可维护性的重要手段.Elsa 作为一款针对 .NET 平台的强大工作流库,为开发者提供了在各种 .NET 应用中轻松集成和执行复杂工作流的能力. 本文将详细介绍 ...

  8. Node.js Express 框架(2)

    1.读取文件并返回给客户端 res.sendFile(path):读取文件并返回给客户端,适合静态页面 app.get("/",function(req,res){ res.sen ...

  9. uni-app 使用笔记

    1.前言 也不知道是我水平菜还是文档太烂,这个框架使用的过程中踩了无数的坑,屡次想砸键盘,最后贫穷让我平复了心情.为了纪念这段操蛋的日子,我决定把这些坑都记录下来. 2.数据请求 在实际的项目中,数据 ...

  10. cve-2021-3156-sudo堆溢出简单分析

    调试方式 首先从github下载代码 https://github.com/sudo-project/sudo/archive/SUDO_1_9_5p1.tar.gz 编译 tar xf sudo-S ...