写了一个极简的netcore缓存类,代替memoryCache

本文介绍了为优化加载速度,在不引入第三方库的情况下,使用C#的static Hashtable实现了一个简单的.NET Core缓存类。虽然没有实现自动清除过期缓存的功能,但在请求时会检查缓存的有效性,满足多数场景需求。
摘要由CSDN通过智能技术生成

为了优化系统的加载速度,在类库里实现缓存效果,又不想安装memoryCache扩展,我用static的Hashtable实现简单的缓存功能。

没实现到期自动清除,但请求时会判定缓存是否过期,所以已经能满足大部分应用场景了。

由于比较简单就不多说,代码注释都没有,原码如下:

using System;
using System.Collections;
using System.Collections.Generic;
using System.Text;

namespace AK.WordsFilter.Models
{
   
    public class MyCache
    {
        static Hashtable MemCache = new Hashtable();

        public void Set<TItem>(object key, TItem value, int seconds)
        {
            var absoluteExpiration = DateTimeOffset.UtcNow.AddSeconds(seconds);
            Set<TItem>(key, value, absoluteExpiration); 
        }

        public void Set<TItem>(object key, TItem value, TimeSpan absoluteExpirationRelativeToNow)
        {
            var absoluteExpiration = DateTimeOffset.UtcNow.Add(absoluteExpirationRelativeToNow);
            Set<TItem>(key, value, absoluteExpiration);
        }

        public void 
### 回答1: 我可以为您提供一个示例,可以帮助您创建一个NetCore SignalR进度条:1.创建一个ASP.NET Core项目并安装Microsoft.AspNetCore.SignalR NuGet包。2.创建一个新的Hub,用于处理客户端/服务器之间的连接:public class ProgressHub : Hub { public async Task SendProgress(int progress) { await Clients.All.SendAsync("UpdateProgress", progress); } }3.在Startup.cs文件中添加SignalR服务:public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); }4.在Startup.cs文件中添加SignalR路由:public void Configure(IApplicationBuilder app) { app.UseSignalR(routes => { routes.MapHub<ProgressHub>("/progress"); }); }5.在客户端创建一个连接:var connection = new signalR.HubConnectionBuilder() .withUrl("/progress") .build();6.从服务器接收更新:connection.on("UpdateProgress", (progress) => { // 更新进度条 });7.从客户端发送更新:connection.invoke("SendProgress", progress); ### 回答2: SignalR 是一个开发实时网络应用程序的框架,可以使服务器端代码推送内容到连接的客户端。要一个 netcore SignalR 进度条,可以按照以下步骤进行: 1. 创建一个新的 ASP.NET Core 项目。在项目中使用 SignalR NuGet 包,以便可以方便地使用 SignalR 框架。 2. 在项目中创建一个名为 "ProgressHub" 的 SignalR Hub。这个 Hub 将用于与客户端建立连接,并用来更新进度条的值。 3. 在 ProgressHub 中创建一个名为 "UpdateProgress" 的方法,用于接收客户端发送的进度更新请求,并广播更新的进度条值给所有已连接的客户端。 4. 创建一个名为 "ProgressBar" 的 Razor Page 或一个视图,用于显示进度条。在该视图中,可以使用 JavaScript 和 SignalR 的 JavaScript 客户端库来订阅 ProgressHub 的进度更新方法,并显示更新的进度条值。 下面是一个简单的示例代码: ```csharp // ProgressHub.cs using Microsoft.AspNetCore.SignalR; using System.Threading.Tasks; namespace YourNamespace { public class ProgressHub : Hub { public async Task UpdateProgress(int value) { // 更新进度条 await Clients.All.SendAsync("UpdateProgressBar", value); } } } // ProgressBar.cshtml @page @model ProgressBarModel <script src="~/lib/signalr/dist/browser/signalr.js"></script> <h1>Progress Bar</h1> <div id="progressBar"></div> <script> const connection = new signalR.HubConnectionBuilder() .withUrl("/progressHub") .build(); connection.on("UpdateProgressBar", function (value) { document.getElementById("progressBar").innerText = `${value}%`; }); connection.start().catch(function (err) { return console.error(err.toString()); }); </script> ``` 这是一个简单的示例,当客户端连接到 SignalR Hub 并调用 UpdateProgress 方法时,进度条将更新并显示给所有客户端。你可以根据自己的需求进行进一步的修改和自定义。 ### 回答3: SignalR是一个强大的实时通信库,可以在Web应用程序中实现实时的多人协作和数据更新。我们可以利用SignalR来实现一个进度条的功能。 首先,我们需要创建一个ASP.NET Core Web应用程序。在Startup的ConfigureServices方法中,我们需要注册SignalR服务,以便我们可以在应用程序中使用它。在Configure方法中,我们需要配置SignalR端点。 在项目中创建一个名为ProgressHub的SignalR Hub。这个将处理客户端的请求,并发送实时进度更新给客户端。在这个中,我们可以定义一个名为"UpdateProgressBar"的方法,该方法将接收进度的更新,并将其广播给所有连接的客户端。 在客户端页面中,我们需要先引用SignalR的JavaScript库,然后创建一个连接到SignalR Hub的实例。我们可以使用Connection.on方法来监听来自ProgressHub的实时进度更新。然后,我们可以将这些更新显示在进度条中,以便用户可以实时查看进度。 接下来,我们可以在后台代码中模拟进度的变化。我们可以使用一个定时任务不断更新进度,并通过ProgressHub的UpdateProgressBar方法发送更新给客户端。在定时任务的每次运行中,我们可以计算当前的进度,并将其作为更新发送给客户端。 下面是一个简单的示例代码,可以实现一个使用SignalR的实时进度条: Startup.cs文件: ```csharp using Microsoft.AspNetCore.Builder; using Microsoft.Extensions.DependencyInjection; namespace ProgressBarApp { public class Startup { public void ConfigureServices(IServiceCollection services) { services.AddSignalR(); } public void Configure(IApplicationBuilder app) { app.UseRouting(); app.UseEndpoints(endpoints => { endpoints.MapHub<ProgressHub>("/progressHub"); }); } } } ``` ProgressHub.cs文件: ```csharp using Microsoft.AspNetCore.SignalR; using System.Threading.Tasks; namespace ProgressBarApp { public class ProgressHub : Hub { public async Task UpdateProgressBar(int progress) { await Clients.All.SendAsync("progressUpdate", progress); } } } ``` Index.cshtml文件: ```html <!DOCTYPE html> <html> <head> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="/signalr/hubs"></script> </head> <body> <div id="progressBar"></div> <script> $(function() { var connection = $.connection("/progressHub"); connection.on("progressUpdate", function(progress) { $("#progressBar").width(progress + "%"); }); connection.start(); }); </script> </body> </html> ``` 这样,一个使用SignalR实现的实时进度条就完成了。当后台进度更新时,客户端将实时收到更新,并将其反映在进度条上。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值