Selaa lähdekoodia

提升ExceptBy性能
修正字符串扩展ContainsSafety的bug
优化MimeMapper

懒得勤快 9 kuukautta sitten
vanhempi
sitoutus
1dba26d57e

+ 11 - 9
Masuit.Tools.Abstractions/Extensions/BaseType/IEnumerableExtensions.cs

@@ -155,9 +155,12 @@ public static class IEnumerableExtensions
     /// <returns></returns>
     public static IEnumerable<T> ExceptBy<T, TKey>(this IEnumerable<T> first, IEnumerable<T> second, Func<T, TKey> keySelector)
     {
+        // 将 second 集合转换为 HashSet 以提高查找效率
+        var keys = new HashSet<TKey>(second.Select(keySelector));
+
+        // 使用 Lookup 来分组 first 集合,并过滤掉 second 集合中存在的元素
         var firstLookup = first.ToLookup(keySelector);
-        var secondLookup = second.ToLookup(keySelector);
-        return firstLookup.Where(kvp => !secondLookup.Contains(kvp.Key)).SelectMany(kvp => kvp).ToList();
+        return firstLookup.Where(g => !keys.Contains(g.Key)).SelectMany(grouping => grouping);
     }
 
 #if NET6_0_OR_GREATER
@@ -487,12 +490,9 @@ public static class IEnumerableExtensions
     /// <param name="values"></param>
     public static void AddRangeIfNotContains<T>(this ICollection<T> @this, params T[] values)
     {
-        foreach (T obj in values)
+        foreach (var obj in values.Where(obj => [email protected](obj)))
         {
-            if ([email protected](obj))
-            {
-                @this.Add(obj);
-            }
+            @this.Add(obj);
         }
     }
 
@@ -1241,7 +1241,7 @@ public static class IEnumerableExtensions
     }
 
     /// <summary>
-    /// 对比两个集合哪些是新增的、删除的、修改的
+    /// 对比两个集合哪些是新增的、删除的、修改的(大数据集时性能不佳,请考虑使用其他重载)
     /// </summary>
     /// <typeparam name="T1"></typeparam>
     /// <typeparam name="T2"></typeparam>
@@ -1249,6 +1249,7 @@ public static class IEnumerableExtensions
     /// <param name="second">旧集合</param>
     /// <param name="condition">对比因素条件</param>
     /// <returns></returns>
+    [Obsolete("大数据集时性能不佳,请考虑使用其他重载")]
     public static (List<T1> adds, List<T2> remove, List<T1> updates) CompareChanges<T1, T2>(this IEnumerable<T1> first, IEnumerable<T2> second, Func<T1, T2, bool> condition)
     {
         first ??= new List<T1>();
@@ -1315,7 +1316,7 @@ public static class IEnumerableExtensions
     }
 
     /// <summary>
-    /// 对比两个集合哪些是新增的、删除的、修改的
+    /// 对比两个集合哪些是新增的、删除的、修改的(大数据集时性能不佳,请考虑使用其他重载)
     /// </summary>
     /// <typeparam name="T1"></typeparam>
     /// <typeparam name="T2"></typeparam>
@@ -1323,6 +1324,7 @@ public static class IEnumerableExtensions
     /// <param name="second">旧集合</param>
     /// <param name="condition">对比因素条件</param>
     /// <returns></returns>
+    [Obsolete("大数据集时性能不佳,请考虑使用其他重载")]
     public static (List<T1> adds, List<T2> remove, List<(T1 first, T2 second)> updates) CompareChangesPlus<T1, T2>(this IEnumerable<T1> first, IEnumerable<T2> second, Func<T1, T2, bool> condition)
     {
         first ??= new List<T1>();

Tiedoston diff-näkymää rajattu, sillä se on liian suuri
+ 734 - 734
Masuit.Tools.Abstractions/Extensions/BaseType/StringExtensions.cs


+ 2 - 2
Masuit.Tools.Abstractions/Files/FileDetector/FileSignatureDetector.cs

@@ -54,7 +54,7 @@ public static class FileSignatureDetector
 
     public static IDetector DetectFiletype(this Stream stream)
     {
-        if (stream.CanSeek&&stream.Length>0)
+        if (stream.CanSeek && stream.Length > 0)
         {
             foreach (var detector in Detectors)
             {
@@ -66,6 +66,6 @@ public static class FileSignatureDetector
                 }
             }
         }
-        return  new NoneDetector();
+        return new NoneDetector();
     }
 }

+ 13 - 27
Masuit.Tools.Abstractions/Mime/MimeMapper.cs

@@ -1,5 +1,6 @@
 using System.Collections.Generic;
 using System.Text.RegularExpressions;
+using Masuit.Tools.Systems;
 
 namespace Masuit.Tools.Mime;
 
@@ -13,11 +14,6 @@ public class MimeMapper : IMimeMapper
     /// </summary>
     public const string DefaultMime = "application/octet-stream";
 
-    /// <summary>
-    /// 在文件路径中搜索文件扩展名的默认正则表达式
-    /// </summary>
-    private readonly Regex _pathExtensionPattern = new(@"\.(\w*)$");
-
     /// <summary>
     /// Mime类型与扩展名的映射字典(扩展名:mimetype)
     /// </summary>
@@ -26,15 +22,12 @@ public class MimeMapper : IMimeMapper
     /// <summary>
     /// mime类型与扩展名的映射关系(mimetype:扩展名)
     /// </summary>
-    public static Dictionary<string, string> ExtTypes { get; } = new();
+    public static LookupX<string, string> ExtTypes { get; }
 
     static MimeMapper()
     {
-        foreach (var item in DefaultMimeItems.Items)
-        {
-            MimeTypes["." + item.Extension] = item.MimeType;
-            ExtTypes[item.MimeType] = "." + item.Extension;
-        }
+        ExtTypes = DefaultMimeItems.Items.ToLookupX(x => x.MimeType, x => "." + x.Extension);
+        MimeTypes = DefaultMimeItems.Items.ToDictionary(x => "." + x.Extension, x => x.MimeType);
     }
 
     /// <summary>
@@ -65,7 +58,7 @@ public class MimeMapper : IMimeMapper
             foreach (var mapping in extensions)
             {
                 MimeTypes[mapping.Extension] = mapping.MimeType;
-                ExtTypes[mapping.MimeType] = mapping.Extension;
+                ExtTypes[mapping.MimeType].Add(mapping.Extension);
             }
         }
         return this;
@@ -87,10 +80,14 @@ public class MimeMapper : IMimeMapper
     /// </summary>
     /// <param name="mime"></param>
     /// <returns></returns>
-    public string GetExtensionFromMime(string mime)
+    public List<string> GetExtensionFromMime(string mime)
     {
         mime = (mime ?? string.Empty).ToLower();
-        return ExtTypes.TryGetValue(mime, out var type) ? type : "";
+        if (ExtTypes.Contains(mime))
+        {
+            return ExtTypes[mime];
+        }
+        return [];
     }
 
     /// <summary>
@@ -100,18 +97,7 @@ public class MimeMapper : IMimeMapper
     /// <returns></returns>
     public string GetMimeFromPath(string path)
     {
-        var extension = GetExtension(path);
+        var extension = Path.GetExtension(path);
         return GetMimeFromExtension(extension);
     }
-
-    /// <summary>
-    /// 获取扩展名
-    /// </summary>
-    /// <param name="path"></param>
-    /// <returns></returns>
-    protected string GetExtension(string path)
-    {
-        var match = _pathExtensionPattern.Match(path ?? string.Empty);
-        return match.Groups.Count > 1 ? match.Groups[1].Value : null;
-    }
-}
+}

+ 4 - 4
Masuit.Tools.Abstractions/Security/Encrypt.cs

@@ -735,7 +735,7 @@ public static class Encrypt
     /// <returns>MD5摘要字符串</returns>
     public static string MDFile(this string fileName)
     {
-        using var fs = new BufferedStream(File.Open(fileName, FileMode.Open, FileAccess.Read), 1048576);
+        var fs = new BufferedStream(File.Open(fileName, FileMode.Open, FileAccess.Read), 1048576);
         using MD5 md5 = MD5.Create();
         byte[] bytes = md5.ComputeHash(fs);
         return GetHexString(bytes);
@@ -748,7 +748,7 @@ public static class Encrypt
     /// <returns></returns>
     public static string SHA256(this Stream stream)
     {
-        using var fs = new BufferedStream(stream, 1048576);
+        var fs = new BufferedStream(stream, 1048576);
         using var sha = System.Security.Cryptography.SHA256.Create();
         byte[] checksum = sha.ComputeHash(fs);
         return BitConverter.ToString(checksum).Replace("-", string.Empty);
@@ -761,7 +761,7 @@ public static class Encrypt
     /// <returns>MD5摘要字符串</returns>
     public static string MDString(this Stream stream)
     {
-        using var fs = new BufferedStream(stream, 1048576);
+        var fs = new BufferedStream(stream, 1048576);
         using MD5 md5 = MD5.Create();
         byte[] bytes = md5.ComputeHash(fs);
         var mdstr = GetHexString(bytes);
@@ -1197,4 +1197,4 @@ public static class RC2Crypt
     }
 
     #endregion 设置加密或解密的密匙
-}
+}

Kaikkia tiedostoja ei voida näyttää, sillä liian monta tiedostoa muuttui tässä diffissä