剽达崖 发表于 2025-5-30 09:21:23

缓存

按存储位置分类的缓存:CPU缓存、内存缓存、磁盘缓存、浏览器缓存。
1. CPU 缓存
使用场景
CPU 缓存主要由 CPU 硬件自动管理,用于加速 CPU 对数据和指令的访问。
在需要进行大量高速计算的场景中非常关键,例如科学计算、3D 游戏的实时渲染、高性能数据分析等。
当程序需要频繁访问某些数据或指令时,CPU 缓存能够显著减少数据从内存传输到 CPU 的时间,提高计算效率。C# 中使用方式
在 C# 编程层面,CPU 缓存是透明的,开发者无法直接控制。
但可以通过合理的代码设计来提高 CPU 缓存的命中率,
例如:数据局部性优化:尽量让程序访问的数据在内存中是连续存储的,这样 CPU 缓存可以一次性加载更多有用的数据。
例如:在遍历数组时,按顺序访问元素:

```
int[] array = new int;
for (int i = 0; i < array.Length; i++)
{
    array = i * 2;
}
``` 2. 内存缓存
使用场景
内存缓存适用于需要快速访问数据的场景,比如高并发的 Web 应用、实时数据处理系统等。
通过将经常使用的数据存储在内存中,可以避免频繁的数据库查询或其他耗时的操作,提高系统的响应速度。C# 中使用方式
在 C# 中,可以使用多种方式实现内存缓存,以下是一些常见的方法:

例如:MemoryCache 是 .NET 框架提供的一个内置内存缓存类,

示例代码如下:

using System;
using System.Runtime.Caching;

class Program
{
    static void Main()
    {
      // 创建 MemoryCache 实例
      MemoryCache cache = MemoryCache.Default;

      // 定义缓存项的键和值
      string cacheKey = "MyData";
      string cacheValue = "Hello, Memory Cache!";

      // 设置缓存项的过期时间
      CacheItemPolicy policy = new CacheItemPolicy
      {
            AbsoluteExpiration = DateTimeOffset.Now.AddSeconds(30)
      };

      // 将数据添加到缓存中
      cache.Add(cacheKey, cacheValue, policy);

      // 从缓存中获取数据
      string retrievedValue = cache.Get(cacheKey) as string;
      if (retrievedValue != null)
      {
            Console.WriteLine("Retrieved from cache: " + retrievedValue);
      }
      else
      {
            Console.WriteLine("Data not found in cache.");
      }
    }
}3. 磁盘缓存
使用场景
磁盘缓存通常用于减少磁盘 I/O 操作,提高数据读写性能。
适用于需要频繁读写大量数据的应用程序,如数据库系统、文件管理系统等。通过将经常访问的数据存储在磁盘缓存中,可以避免每次都从磁盘读取数据,从而提高系统的整体性能。C# 中使用方式
在 C# 中,可以自己实现简单的磁盘缓存逻辑,以下是一个示例:

using System;
using System.IO;

class DiskCache
{
    private string cacheDirectory;

    public DiskCache(string directory)
    {
      cacheDirectory = directory;
      if (!Directory.Exists(cacheDirectory))
      {
            Directory.CreateDirectory(cacheDirectory);
      }
    }

    public void AddToCache(string key, string data)
    {
      string filePath = Path.Combine(cacheDirectory, key);
      File.WriteAllText(filePath, data);
    }

    public string GetFromCache(string key)
    {
      string filePath = Path.Combine(cacheDirectory, key);
      if (File.Exists(filePath))
      {
            return File.ReadAllText(filePath);
      }
      return null;
    }
}

class Program
{
    static void Main()
    {
      DiskCache cache = new DiskCache("DiskCache");
      string cacheKey = "MyDiskData";
      string cacheValue = "Hello, Disk Cache!";

      // 添加数据到磁盘缓存
      cache.AddToCache(cacheKey, cacheValue);

      // 从磁盘缓存中获取数据
      string retrievedValue = cache.GetFromCache(cacheKey);
      if (retrievedValue != null)
      {
            Console.WriteLine("Retrieved from disk cache: " + retrievedValue);
      }
      else
      {
            Console.WriteLine("Data not found in disk cache.");
      }
    }
}4. 浏览器缓存
使用场景
浏览器缓存主要用于 Web 开发中,通过缓存网页资源(如 HTML、CSS、JavaScript 文件、图片等),减少用户再次访问相同页面时的网络请求,提高页面加载速度。对于一些静态资源或不经常更新的内容,使用浏览器缓存可以显著提升用户体验。C# 中使用方式
在 C# 开发的 Web 应用中,可以通过设置 HTTP 响应头来控制浏览器缓存。
以下是一个使用 ASP.NET Core 的示例:

using Microsoft.AspNetCore.Mvc;


")]
public class CacheController : ControllerBase
{
   
    public IActionResult Get()
    {
      // 设置缓存控制头
      Response.Headers.Add("Cache-Control", "public, max-age=3600");

      return Ok("This data can be cached by the browser for 1 hour.");
    }
}
//在上面代码中,通过设置 Cache-Control 响应头,告诉浏览器该数据可以被公开缓存,并且缓存时间为 3600 秒(1 小时)。
来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
页: [1]
查看完整版本: 缓存