Browse Source

Session优化

懒得勤快 6 years ago
parent
commit
07eec5e2ca

+ 0 - 41
Masuit.Tools.Core/AspNetCore/Extensions/ServiceCollectionExtensions.cs

@@ -1,41 +0,0 @@
-using Masuit.Tools.AspNetCore.ResumeFileResults.Executor;
-using Masuit.Tools.AspNetCore.ResumeFileResults.ResumeFileResult;
-using Masuit.Tools.Files;
-using Microsoft.AspNetCore.Mvc.Infrastructure;
-using Microsoft.Extensions.DependencyInjection;
-using Microsoft.Extensions.DependencyInjection.Extensions;
-
-namespace Masuit.Tools.AspNetCore.ResumeFileResults.Extensions
-{
-    /// <summary>
-    /// 依赖注入ServiceCollection容器扩展方法
-    /// </summary>
-    public static class ServiceCollectionExtensions
-    {
-        /// <summary>
-        /// 注入断点续传服务
-        /// </summary>
-        /// <param name="services"></param>
-        /// <returns></returns>
-        public static IServiceCollection AddResumeFileResult(this IServiceCollection services)
-        {
-            services.TryAddSingleton<IActionResultExecutor<ResumePhysicalFileResult>, ResumePhysicalFileResultExecutor>();
-            services.TryAddSingleton<IActionResultExecutor<ResumeVirtualFileResult>, ResumeVirtualFileResultExecutor>();
-            services.TryAddSingleton<IActionResultExecutor<ResumeFileStreamResult>, ResumeFileStreamResultExecutor>();
-            services.TryAddSingleton<IActionResultExecutor<ResumeFileContentResult>, ResumeFileContentResultExecutor>();
-            return services;
-        }
-
-        /// <summary>
-        /// 注入7z压缩
-        /// </summary>
-        /// <param name="services"></param>
-        /// <returns></returns>
-        public static IServiceCollection AddSevenZipCompressor(this IServiceCollection services)
-        {
-            services.AddHttpClient();
-            services.TryAddTransient<ISevenZipCompressor, SevenZipCompressor>();
-            return services;
-        }
-    }
-}

+ 103 - 0
Masuit.Tools.Core/AspNetCore/ServiceCollectionExtensions.cs

@@ -0,0 +1,103 @@
+using Masuit.Tools.AspNetCore.ResumeFileResults.Executor;
+using Masuit.Tools.AspNetCore.ResumeFileResults.ResumeFileResult;
+using Masuit.Tools.Core.Net;
+using Masuit.Tools.Core.NoSQL;
+using Masuit.Tools.Files;
+using Masuit.Tools.NoSQL;
+using Microsoft.AspNetCore.Builder;
+using Microsoft.AspNetCore.Http;
+using Microsoft.AspNetCore.Mvc.Infrastructure;
+using Microsoft.Extensions.DependencyInjection;
+using Microsoft.Extensions.DependencyInjection.Extensions;
+
+namespace Masuit.Tools.Core.AspNetCore
+{
+    /// <summary>
+    /// 依赖注入ServiceCollection容器扩展方法
+    /// </summary>
+    public static class ServiceCollectionExtensions
+    {
+        /// <summary>
+        /// 注入断点续传服务
+        /// </summary>
+        /// <param name="services"></param>
+        /// <returns></returns>
+        public static IServiceCollection AddResumeFileResult(this IServiceCollection services)
+        {
+            services.TryAddSingleton<IActionResultExecutor<ResumePhysicalFileResult>, ResumePhysicalFileResultExecutor>();
+            services.TryAddSingleton<IActionResultExecutor<ResumeVirtualFileResult>, ResumeVirtualFileResultExecutor>();
+            services.TryAddSingleton<IActionResultExecutor<ResumeFileStreamResult>, ResumeFileStreamResultExecutor>();
+            services.TryAddSingleton<IActionResultExecutor<ResumeFileContentResult>, ResumeFileContentResultExecutor>();
+            return services;
+        }
+
+        /// <summary>
+        /// 注入7z压缩
+        /// </summary>
+        /// <param name="services"></param>
+        /// <returns></returns>
+        public static IServiceCollection AddSevenZipCompressor(this IServiceCollection services)
+        {
+            services.AddHttpClient();
+            services.TryAddTransient<ISevenZipCompressor, SevenZipCompressor>();
+            return services;
+        }
+
+        /// <summary>
+        /// 注入一个本地化的RedisHelper
+        /// </summary>
+        /// <param name="services"></param>
+        /// <returns></returns>
+        public static IServiceCollection AddLocalRedisHelper(this IServiceCollection services)
+        {
+            return AddRedisHelper(services, "local");
+        }
+
+        /// <summary>
+        /// 注入一个默认的RedisHelper实例
+        /// </summary>
+        /// <param name="services"></param>
+        /// <param name="redisHost"></param>
+        /// <returns></returns>
+        public static IServiceCollection AddDefaultRedisHelper(this IServiceCollection services, string redisHost)
+        {
+            return AddRedisHelper(services, "default", redisHost);
+        }
+
+        /// <summary>
+        /// 注入RedisHelper
+        /// </summary>
+        /// <param name="services"></param>
+        /// <param name="name"></param>
+        /// <param name="redisHost"></param>
+        /// <returns></returns>
+        public static IServiceCollection AddRedisHelper(this IServiceCollection services, string name, string redisHost = null)
+        {
+            RedisHelperFactory.ConnectionCache[name] = redisHost;
+            services.TryAddTransient<RedisHelperFactory>();
+            services.TryAddTransient(s => RedisHelper.GetInstance(redisHost));
+            return services;
+        }
+
+        /// <summary>
+        /// 注入HttpContext静态对象,方便在任意地方获取HttpContext,services.AddHttpContextAccessor();
+        /// </summary>
+        /// <param name="services"></param>
+        public static void AddStaticHttpContext(this IServiceCollection services)
+        {
+            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
+        }
+
+        /// <summary>
+        /// 注入HttpContext静态对象,方便在任意地方获取HttpContext,app.UseStaticHttpContext();
+        /// </summary>
+        /// <param name="app"></param>
+        /// <returns></returns>
+        public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
+        {
+            var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
+            HttpContext2.Configure(httpContextAccessor);
+            return app;
+        }
+    }
+}

+ 1 - 1
Masuit.Tools.Core/Masuit.Tools.Core.csproj

@@ -2,7 +2,7 @@
 
   <PropertyGroup>
     <TargetFramework>netcoreapp2.1</TargetFramework>
-    <Version>2.2.4.3</Version>
+    <Version>2.2.4.4</Version>
     <Authors>懒得勤快</Authors>
     <Company>masuit.com</Company>
     <Description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,硬件信息,字符串扩展方法,日期时间扩展操作,大文件拷贝,图像裁剪,html处理,验证码、NoSql等常用封装。

+ 0 - 33
Masuit.Tools.Core/Net/StaticHttpContextExtensions.cs

@@ -1,33 +0,0 @@
-using Microsoft.AspNetCore.Builder;
-using Microsoft.AspNetCore.Http;
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Masuit.Tools.Core.Net
-{
-    /// <summary>
-    /// 实现类似于.NET Framework的HttpContext静态对象的中间件对象
-    /// </summary>
-    public static class StaticHttpContextExtensions
-    {
-        /// <summary>
-        /// 注入HttpContext静态对象,方便在任意地方获取HttpContext,services.AddHttpContextAccessor();
-        /// </summary>
-        /// <param name="services"></param>
-        public static void AddStaticHttpContext(this IServiceCollection services)
-        {
-            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
-        }
-
-        /// <summary>
-        /// 注入HttpContext静态对象,方便在任意地方获取HttpContext,app.UseStaticHttpContext();
-        /// </summary>
-        /// <param name="app"></param>
-        /// <returns></returns>
-        public static IApplicationBuilder UseStaticHttpContext(this IApplicationBuilder app)
-        {
-            var httpContextAccessor = app.ApplicationServices.GetRequiredService<IHttpContextAccessor>();
-            HttpContext2.Configure(httpContextAccessor);
-            return app;
-        }
-    }
-}

+ 7 - 21
Masuit.Tools.Core/Net/WebExtension.cs

@@ -1,4 +1,5 @@
 using Masuit.Tools.Core.Config;
+using Masuit.Tools.Core.NoSQL;
 using Masuit.Tools.Logging;
 using Masuit.Tools.Models;
 using Masuit.Tools.NoSQL;
@@ -269,7 +270,6 @@ namespace Masuit.Tools.Core.Net
 
         #region 写Session
 
-        //private static readonly RedisHelper Helper = RedisHelper.GetInstance(1);
         /// <summary>
         /// 写Session
         /// </summary>
@@ -299,22 +299,11 @@ namespace Masuit.Tools.Core.Net
             {
                 throw new Exception("请确保此方法调用是在同步线程中执行!");
             }
-
-            //var sessionKey = HttpContext2.Current.Request.Cookies["SessionID"];
-            //if (string.IsNullOrEmpty(sessionKey))
-            //{
-            //    sessionKey = Guid.NewGuid().ToString().AESEncrypt();
-            //    HttpContext2.Current.Response.Cookies.Append("SessionID", sessionKey);
-            //}
-
-            if (session != null)
-            {
-                session.SetString(key, obj.ToJsonString());
-            }
+            session?.SetString(key, obj.ToJsonString());
 
             try
             {
-                using (RedisHelper redisHelper = RedisHelper.GetInstance(1))
+                using (RedisHelper redisHelper = RedisHelper.GetInstance(RedisHelperFactory.ConnectionCache.Values.FirstOrDefault() ?? throw new ArgumentException("在使用该方法之前,请先在Startup.cs中配置services.AddxxxRedisHelper"), 1))
                 {
                     redisHelper.SetHash("Session:" + HttpContext2.Current.Connection.Id, key, obj, TimeSpan.FromMinutes(expire)); //存储数据到缓存服务器,这里将字符串"my value"缓存,key 是"test"
                 }
@@ -371,7 +360,7 @@ namespace Masuit.Tools.Core.Net
                 try
                 {
                     var sessionKey = "Session:" + HttpContext2.Current.Connection.Id;
-                    using (RedisHelper redisHelper = RedisHelper.GetInstance(1))
+                    using (RedisHelper redisHelper = RedisHelper.GetInstance(RedisHelperFactory.ConnectionCache.Values.FirstOrDefault() ?? throw new ArgumentException("在使用该方法之前,请先在Startup.cs中配置services.AddxxxRedisHelper"), 1))
                     {
                         if (redisHelper.KeyExists(sessionKey) && redisHelper.HashExists(sessionKey, key))
                         {
@@ -404,15 +393,12 @@ namespace Masuit.Tools.Core.Net
                 throw new Exception("请确保此方法调用是在同步线程中执行!");
             }
 
-            if (session != null)
-            {
-                session.Remove(key);
-            }
+            session?.Remove(key);
 
             try
             {
                 var sessionKey = "Session:" + HttpContext2.Current.Connection.Id;
-                using (RedisHelper redisHelper = RedisHelper.GetInstance(1))
+                using (RedisHelper redisHelper = RedisHelper.GetInstance(RedisHelperFactory.ConnectionCache.Values.FirstOrDefault() ?? throw new ArgumentException("在使用该方法之前,请先在Startup.cs中配置services.AddxxxRedisHelper"), 1))
                 {
                     if (redisHelper.KeyExists(sessionKey) && redisHelper.HashExists(sessionKey, key))
                     {
@@ -435,7 +421,7 @@ namespace Masuit.Tools.Core.Net
         {
             try
             {
-                using (RedisHelper redisHelper = RedisHelper.GetInstance(1))
+                using (RedisHelper redisHelper = RedisHelper.GetInstance(RedisHelperFactory.ConnectionCache.Values.FirstOrDefault() ?? throw new ArgumentException("在使用该方法之前,请先在Startup.cs中配置services.AddxxxRedisHelper"), 1))
                 {
                     return redisHelper.GetServer().Keys(1, "Session:*").Count();
                 }

+ 0 - 45
Masuit.Tools.Core/NoSQL/ServiceCollectionExtensions.cs

@@ -1,45 +0,0 @@
-using Microsoft.Extensions.DependencyInjection;
-
-namespace Masuit.Tools.Core.NoSQL
-{
-    /// <summary>
-    /// asp.net core依赖注入容器扩展
-    /// </summary>
-    public static class ServiceCollectionExtensions
-    {
-        /// <summary>
-        /// 注入一个本地化的RedisHelper
-        /// </summary>
-        /// <param name="services"></param>
-        /// <returns></returns>
-        public static IServiceCollection AddLocalRedisHelper(this IServiceCollection services)
-        {
-            return AddRedisHelper(services, "local");
-        }
-
-        /// <summary>
-        /// 注入一个默认的RedisHelper实例
-        /// </summary>
-        /// <param name="services"></param>
-        /// <param name="redisHost"></param>
-        /// <returns></returns>
-        public static IServiceCollection AddDefaultRedisHelper(this IServiceCollection services, string redisHost)
-        {
-            return AddRedisHelper(services, "default", redisHost);
-        }
-
-        /// <summary>
-        /// 注入RedisHelper
-        /// </summary>
-        /// <param name="services"></param>
-        /// <param name="name"></param>
-        /// <param name="redisHost"></param>
-        /// <returns></returns>
-        public static IServiceCollection AddRedisHelper(this IServiceCollection services, string name, string redisHost = null)
-        {
-            RedisHelperFactory.ConnectionCache[name] = redisHost;
-            services.AddTransient<RedisHelperFactory>();
-            return services;
-        }
-    }
-}

+ 1 - 51
Masuit.Tools.Core/Win32/Windows.cs

@@ -1,9 +1,7 @@
-using Masuit.Tools.Hardware;
-using System;
+using System;
 using System.Diagnostics;
 using System.Management;
 using System.Net;
-using System.Runtime.InteropServices;
 using System.Text;
 using System.Text.RegularExpressions;
 using System.Threading;
@@ -16,54 +14,6 @@ namespace Masuit.Tools.Win32
     /// </summary>
     public static class Windows
     {
-        /// <summary>
-        /// 跨平台调用C++的方法
-        /// </summary>
-        /// <param name="hwProc">程序句柄</param>
-        /// <returns></returns>
-        [DllImport("psapi.dll")]
-        static extern int EmptyWorkingSet(IntPtr hwProc);
-
-        /// <summary>
-        /// 清理系统内存,返回优化内存后的内存占用率
-        /// </summary>
-        /// <returns>优化内存后的内存占用率</returns>
-        public static double ClearMemory()
-        {
-            ClearMemorySilent();
-            Thread.Sleep(1000);
-            return SystemInfo.GetRamInfo().MemoryUsage;
-        }
-
-        /// <summary>
-        /// 静默清理系统内存
-        /// </summary>
-        public static void ClearMemorySilent()
-        {
-            GC.Collect();
-            GC.WaitForPendingFinalizers();
-            foreach (Process p in Process.GetProcesses())
-            {
-                using (p)
-                {
-                    if ((p.ProcessName.Equals("System")) && (p.ProcessName.Equals("Idle")))
-                    {
-                        //两个系统的关键进程,不整理
-                        continue;
-                    }
-
-                    try
-                    {
-                        EmptyWorkingSet(p.Handle);
-                    }
-                    catch
-                    {
-                        // ignored
-                    }
-                }
-            }
-        }
-
         /// <summary>  
         /// 获取当前使用的IP  
         /// </summary>