C#创建一个缓存,用来存储数据,当1秒到或者缓存满了,自动向EXCEL添加缓存中所有数据的代码,同时使用多线程定时器
时间: 2024-09-19 13:01:55 浏览: 56
在C#中,你可以使用`MemoryCache`来创建一个简单的缓存,并结合`Task`和`Timer`来实现每秒检查缓存并添加到Excel的功能。下面是一个基础的示例:
```csharp
using System;
using System.Collections.Generic;
using System.IO;
using System.Runtime.Caching;
using OfficeOpenXml;
// 创建缓存
private static MemoryCache cache = new MemoryCache("MyCache");
public void CacheDataAndWriteToExcel(string data)
{
// 缓存数据,设置过期时间为1秒
cache.Add("DataKey", data, DateTimeOffset.UtcNow.AddSeconds(1));
// 使用多线程定时器,每隔一秒执行一次检查和写入操作
var timer = new Timer(OnTimerTick, null, TimeSpan.FromSeconds(1), TimeSpan.FromSeconds(1));
}
private async Task OnTimerTick(object state)
{
try
{
// 检查缓存是否已满或过期
if (cache.Count > MaxItemsInCache) // 设置最大缓存项数
{
List<string> cachedData = cache.GetValues("DataKey") as List<string>;
// 如果有缓存数据,写入Excel
using (var excelFile = new ExcelPackage(new FileInfo("Output.xlsx")))
{
var worksheet = excelFile.Workbook.Worksheets.Add("Cache Data");
for (int i = 0; i < cachedData.Count; i++)
{
worksheet.Cells[i + 1, 1].Value = cachedData[i];
}
}
// 清除部分缓存,避免超过最大限制
foreach (string key in cache.Keys.Take(cache.Count - MaxItemsInCache))
{
cache.Remove(key);
}
}
}
catch (Exception ex)
{
Console.WriteLine($"Error occurred: {ex.Message}");
}
}
```
在这个例子中,我们假设`MaxItemsInCache`是你的缓存允许的最大项目数。注意这只是一个基本框架,实际应用中可能需要处理更多异常情况以及优化Excel文件的写入过程。
阅读全文