Selaa lähdekoodia

修正流访问的bug

懒得勤快 1 vuosi sitten
vanhempi
sitoutus
01bb198bcb

+ 1 - 1
Masuit.Tools.Abstractions/Extensions/BaseType/StreamExtensions.cs

@@ -44,7 +44,7 @@ public static class StreamExtensions
     {
         stream.Position = 0;
         byte[] bytes = new byte[stream.Length];
-        stream.Read(bytes, 0, bytes.Length);
+        _ = stream.Read(bytes, 0, bytes.Length);
 
         // 设置当前流的位置为流的开始
         stream.Seek(0, SeekOrigin.Begin);

+ 109 - 100
Masuit.Tools.Abstractions/Files/FileExt.cs

@@ -5,112 +5,121 @@ using System.Threading.Tasks;
 
 namespace Masuit.Tools.Files
 {
-	/// <summary>
-	/// 大文件操作扩展类
-	/// </summary>
-	public static class FileExt
-	{
-		/// <summary>
-		/// 以文件流的形式复制大文件
-		/// </summary>
-		/// <param name="fs">源</param>
-		/// <param name="dest">目标地址</param>
-		/// <param name="bufferSize">缓冲区大小,默认8MB</param>
-		public static void CopyToFile(this Stream fs, string dest, int bufferSize = 1024 * 8 * 1024)
-		{
-			using var fsWrite = new FileStream(dest, FileMode.OpenOrCreate, FileAccess.ReadWrite);
-			var stream = new BufferedStream(fs, bufferSize);
-			stream.CopyTo(fsWrite);
-		}
+    /// <summary>
+    /// 大文件操作扩展类
+    /// </summary>
+    public static class FileExt
+    {
+        /// <summary>
+        /// 以文件流的形式复制大文件
+        /// </summary>
+        /// <param name="fs">源</param>
+        /// <param name="dest">目标地址</param>
+        /// <param name="bufferSize">缓冲区大小,默认8MB</param>
+        public static void CopyToFile(this Stream fs, string dest, int bufferSize = 1024 * 8 * 1024)
+        {
+            fs.Seek(0, SeekOrigin.Begin);
+            using var fsWrite = new FileStream(dest, FileMode.OpenOrCreate, FileAccess.ReadWrite);
+            var stream = new BufferedStream(fs, bufferSize);
+            stream.CopyTo(fsWrite);
+            fs.Seek(0, SeekOrigin.Begin);
+        }
 
-		/// <summary>
-		/// 以文件流的形式复制大文件(异步方式)
-		/// </summary>
-		/// <param name="fs">源</param>
-		/// <param name="dest">目标地址</param>
-		/// <param name="bufferSize">缓冲区大小,默认8MB</param>
-		public static Task CopyToFileAsync(this Stream fs, string dest, int bufferSize = 1024 * 1024 * 8)
-		{
-			using var fsWrite = new FileStream(dest, FileMode.OpenOrCreate, FileAccess.ReadWrite);
-			var stream = new BufferedStream(fs, bufferSize);
-			return stream.CopyToAsync(fsWrite);
-		}
+        /// <summary>
+        /// 以文件流的形式复制大文件(异步方式)
+        /// </summary>
+        /// <param name="fs">源</param>
+        /// <param name="dest">目标地址</param>
+        /// <param name="bufferSize">缓冲区大小,默认8MB</param>
+        public static Task CopyToFileAsync(this Stream fs, string dest, int bufferSize = 1024 * 1024 * 8)
+        {
+            using var fsWrite = new FileStream(dest, FileMode.OpenOrCreate, FileAccess.ReadWrite);
+            var stream = new BufferedStream(fs, bufferSize);
+            return stream.CopyToAsync(fsWrite);
+        }
 
-		/// <summary>
-		/// 将内存流转储成文件
-		/// </summary>
-		/// <param name="ms"></param>
-		/// <param name="filename"></param>
-		public static void SaveFile(this Stream ms, string filename)
-		{
-			using var fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
-			var stream = new BufferedStream(ms, 1048576);
-			stream.CopyTo(fs);
-		}
+        /// <summary>
+        /// 将内存流转储成文件
+        /// </summary>
+        /// <param name="ms"></param>
+        /// <param name="filename"></param>
+        public static void SaveFile(this Stream ms, string filename)
+        {
+            ms.Seek(0, SeekOrigin.Begin);
+            using var fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
+            var stream = new BufferedStream(ms, 1048576);
+            stream.CopyTo(fs);
+            ms.Seek(0, SeekOrigin.Begin);
+        }
 
-		/// <summary>
-		/// 将内存流转储成文件
-		/// </summary>
-		/// <param name="ms"></param>
-		/// <param name="filename"></param>
-		public static Task SaveFileAsync(this Stream ms, string filename)
-		{
-			using var fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
-			var stream = new BufferedStream(ms, 1048576);
-			return stream.CopyToAsync(fs);
-		}
+        /// <summary>
+        /// 将内存流转储成文件
+        /// </summary>
+        /// <param name="ms"></param>
+        /// <param name="filename"></param>
+        public static async Task SaveFileAsync(this Stream ms, string filename)
+        {
+            ms.Seek(0, SeekOrigin.Begin);
+            using var fs = new FileStream(filename, FileMode.Create, FileAccess.Write);
+            var stream = new BufferedStream(ms, 1048576);
+            await stream.CopyToAsync(fs);
+            ms.Seek(0, SeekOrigin.Begin);
+        }
 
-		/// <summary>
-		/// 计算文件的 MD5 值
-		/// </summary>
-		/// <param name="fs">源文件流</param>
-		/// <returns>MD5 值16进制字符串</returns>
-		public static string GetFileMD5(this FileStream fs) => HashFile(fs);
+        /// <summary>
+        /// 计算文件的 MD5 值
+        /// </summary>
+        /// <param name="fs">源文件流</param>
+        /// <returns>MD5 值16进制字符串</returns>
+        public static string GetFileMD5(this FileStream fs) => HashFile(fs);
 
-		/// <summary>
-		/// 计算文件的 sha1 值
-		/// </summary>
-		/// <param name="fs">源文件流</param>
-		/// <returns>sha1 值16进制字符串</returns>
-		public static string GetFileSha1(this Stream fs) => HashFile(fs, nameof(SHA1));
+        /// <summary>
+        /// 计算文件的 sha1 值
+        /// </summary>
+        /// <param name="fs">源文件流</param>
+        /// <returns>sha1 值16进制字符串</returns>
+        public static string GetFileSha1(this Stream fs) => HashFile(fs, nameof(SHA1));
 
-		/// <summary>
-		/// 计算文件的 sha256 值
-		/// </summary>
-		/// <param name="fs">源文件流</param>
-		/// <returns>sha256 值16进制字符串</returns>
-		public static string GetFileSha256(this Stream fs) => HashFile(fs, nameof(SHA256));
+        /// <summary>
+        /// 计算文件的 sha256 值
+        /// </summary>
+        /// <param name="fs">源文件流</param>
+        /// <returns>sha256 值16进制字符串</returns>
+        public static string GetFileSha256(this Stream fs) => HashFile(fs, nameof(SHA256));
 
-		/// <summary>
-		/// 计算文件的 sha512 值
-		/// </summary>
-		/// <param name="fs">源文件流</param>
-		/// <returns>sha512 值16进制字符串</returns>
-		public static string GetFileSha512(this Stream fs) => HashFile(fs, nameof(SHA512));
+        /// <summary>
+        /// 计算文件的 sha512 值
+        /// </summary>
+        /// <param name="fs">源文件流</param>
+        /// <returns>sha512 值16进制字符串</returns>
+        public static string GetFileSha512(this Stream fs) => HashFile(fs, nameof(SHA512));
 
-		/// <summary>
-		/// 计算文件的哈希值
-		/// </summary>
-		/// <param name="fs">被操作的源数据流</param>
-		/// <param name="algo">加密算法</param>
-		/// <returns>哈希值16进制字符串</returns>
-		private static string HashFile(Stream fs, string algo = nameof(MD5))
-		{
-			using HashAlgorithm crypto = algo switch
-			{
-				nameof(SHA1) => SHA1.Create(),
-				nameof(SHA256) => SHA256.Create(),
-				nameof(SHA512) => SHA512.Create(),
-				_ => MD5.Create(),
-			};
-			var stream = new BufferedStream(fs, 1048576);
-			byte[] hash = crypto.ComputeHash(stream);
-			var sb = new StringBuilder();
-			foreach (var t in hash)
-			{
-				sb.Append(t.ToString("x2"));
-			}
-			return sb.ToString();
-		}
-	}
+        /// <summary>
+        /// 计算文件的哈希值
+        /// </summary>
+        /// <param name="fs">被操作的源数据流</param>
+        /// <param name="algo">加密算法</param>
+        /// <returns>哈希值16进制字符串</returns>
+        private static string HashFile(Stream fs, string algo = nameof(MD5))
+        {
+            fs.Seek(0, SeekOrigin.Begin);
+            using HashAlgorithm crypto = algo switch
+            {
+                nameof(SHA1) => SHA1.Create(),
+                nameof(SHA256) => SHA256.Create(),
+                nameof(SHA512) => SHA512.Create(),
+                _ => MD5.Create(),
+            };
+            var stream = new BufferedStream(fs, 1048576);
+            byte[] hash = crypto.ComputeHash(stream);
+            var sb = new StringBuilder();
+            foreach (var t in hash)
+            {
+                sb.Append(t.ToString("x2"));
+            }
+
+            fs.Seek(0, SeekOrigin.Begin);
+            return sb.ToString();
+        }
+    }
 }

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

@@ -3,7 +3,7 @@
         <TargetFrameworks>netstandard2.0;netstandard2.1;net461;net5;net6;net7;net8</TargetFrameworks>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>2.6.8.2</Version>
+        <Version>2.6.8.3</Version>
         <Authors>懒得勤快</Authors>
         <Description>全龄段友好的C#万能工具库,码数吐司库,不管你是菜鸟新手还是骨灰级玩家都能轻松上手,Masuit.Tools基础公共库(适用于.NET4.6.1/.NET Standard2.0及以上项目),包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。
             官网教程:https://tools.masuit.org

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

@@ -18,7 +18,7 @@
         <Product>Masuit.Tools.AspNetCore</Product>
         <PackageId>Masuit.Tools.AspNetCore</PackageId>
         <LangVersion>latest</LangVersion>
-        <Version>1.2.8.2</Version>
+        <Version>1.2.8.3</Version>
         <RepositoryType></RepositoryType>
         <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
         <FileVersion>1.1.9</FileVersion>

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

@@ -6,7 +6,7 @@
 官网教程:https://tools.masuit.org
 github:https://github.com/ldqk/Masuit.Tools
         </Description>
-        <Version>2.6.8.2</Version>
+        <Version>2.6.8.3</Version>
         <Copyright>Copyright © 懒得勤快</Copyright>
         <PackageProjectUrl>https://github.com/ldqk/Masuit.Tools</PackageProjectUrl>
         <PackageTags>Masuit.Tools,工具库,Utility,Crypt,Extensions</PackageTags>

+ 2 - 2
Masuit.Tools.Excel/Masuit.Tools.Excel.csproj

@@ -3,7 +3,7 @@
         <TargetFramework>netstandard2.0</TargetFramework>
         <LangVersion>latest</LangVersion>
         <AllowUnsafeBlocks>true</AllowUnsafeBlocks>
-        <Version>1.2.8.1</Version>
+        <Version>1.2.8.2</Version>
         <Authors>懒得勤快</Authors>
         <Description>Masuit.Tools.Excel导出库,支持一些简单数据的导出,支持图片列</Description>
         <Copyright>懒得勤快</Copyright>
@@ -38,7 +38,7 @@
       </None>
     </ItemGroup>
     <ItemGroup>
-        <PackageReference Include="EPPlus" Version="7.0.3" />
+        <PackageReference Include="EPPlus" Version="7.0.4" />
         <PackageReference Include="Microsoft.SourceLink.GitHub" Version="8.0.0" PrivateAssets="All" />
     </ItemGroup>
     <ItemGroup>

+ 2 - 1
Masuit.Tools.Net45/Media/ImageUtilities.cs

@@ -5,6 +5,7 @@ using System.Drawing.Imaging;
 using System.IO;
 using System.Linq;
 using System.Threading.Tasks;
+using Masuit.Tools.Systems;
 
 namespace Masuit.Tools.Media
 {
@@ -1088,7 +1089,7 @@ namespace Masuit.Tools.Media
         {
             string strbase64 = source.Substring(source.IndexOf(',') + 1).Trim('\0');
             byte[] arr = Convert.FromBase64String(strbase64);
-            using var ms = new MemoryStream(arr);
+            using var ms = new PooledMemoryStream(arr);
             using var bmpp = new Bitmap(ms);
 
             //新建第二个bitmap类型的bmpp2变量。

+ 2 - 2
Masuit.Tools.Net45/package.nuspec

@@ -2,7 +2,7 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net45</id>
-    <version>2.6.8.2</version>
+    <version>2.6.8.3</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>
@@ -10,7 +10,7 @@
     <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
     <!--<iconUrl></iconUrl>-->
     <requireLicenseAcceptance>false</requireLicenseAcceptance>
-    <description>Masuit.Tools的.NET Framework 4.5专用版本,相比4.6.1及.NET Core的版本,阉割了HTML、文件压缩、ASP.NET扩展、硬件监测、Session扩展等功能。</description>
+    <description>全龄段友好的C#万能工具库,码数吐司库(适用于.NET Core项目),Masuit.Tools的.NET Framework 4.5专用版本,相比4.6.1及.NET Core的版本,阉割了HTML、文件压缩、ASP.NET扩展、硬件监测、Session扩展等功能。</description>
     <releaseNotes>如有问题请联系作者QQ:3444764617,或者到项目的github反馈问题,详细的API文档在github上:https://github.com/ldqk/Masuit.Tools</releaseNotes>
     <copyright>Copyright ©  懒得勤快</copyright>
     <tags>Masuit.Tools,工具库,Utility,Crypt,Extensions</tags>

+ 1 - 1
Masuit.Tools.NoSQL.MongoDBClient/Masuit.Tools.NoSQL.MongoDBClient.csproj

@@ -38,7 +38,7 @@
   </PropertyGroup>
 
   <ItemGroup>
-    <PackageReference Include="MongoDB.Driver" Version="2.22.0" />
+    <PackageReference Include="MongoDB.Driver" Version="2.23.0" />
   </ItemGroup>
 
 </Project>

+ 4 - 4
Masuit.Tools/Files/SevenZipCompressor.cs

@@ -25,10 +25,10 @@ namespace Masuit.Tools.Files
         /// <param name="files">多个文件路径,文件或文件夹,或网络路径http/https</param>
         /// <param name="rootdir"></param>
         /// <returns>文件流</returns>
-        public static MemoryStream ZipStream(List<string> files, string rootdir = "")
+        public static PooledMemoryStream ZipStream(List<string> files, string rootdir = "")
         {
             using var archive = CreateZipArchive(files, rootdir);
-            var ms = new MemoryStream();
+            var ms = new PooledMemoryStream();
             archive.SaveTo(ms, new WriterOptions(CompressionType.LZMA)
             {
                 LeaveStreamOpen = true,
@@ -47,7 +47,7 @@ namespace Masuit.Tools.Files
         /// <param name="archiveType"></param>
         /// <param name="disposeAllStreams">是否需要释放所有流</param>
         /// <returns>文件流</returns>
-        public static MemoryStream ZipStream(DisposableDictionary<string, Stream> streams, ArchiveType archiveType = ArchiveType.Zip, bool disposeAllStreams = false)
+        public static PooledMemoryStream ZipStream(DisposableDictionary<string, Stream> streams, ArchiveType archiveType = ArchiveType.Zip, bool disposeAllStreams = false)
         {
             using var archive = ArchiveFactory.Create(archiveType);
             foreach (var pair in streams)
@@ -55,7 +55,7 @@ namespace Masuit.Tools.Files
                 archive.AddEntry(pair.Key, pair.Value, true);
             }
 
-            var ms = new MemoryStream();
+            var ms = new PooledMemoryStream();
             archive.SaveTo(ms, new WriterOptions(CompressionType.LZMA)
             {
                 LeaveStreamOpen = true,

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

@@ -220,7 +220,7 @@
       <Version>1.0.0</Version>
     </PackageReference>
     <PackageReference Include="StackExchange.Redis">
-      <Version>2.7.4</Version>
+      <Version>2.7.10</Version>
     </PackageReference>
     <PackageReference Include="System.ValueTuple">
       <Version>4.5.0</Version>

+ 3 - 2
Masuit.Tools/Mvc/ActionResults/ResumeFileContentResult.cs

@@ -1,5 +1,6 @@
 using System;
 using System.IO;
+using Masuit.Tools.Systems;
 
 namespace Masuit.Tools.Mvc.ActionResults
 {
@@ -12,7 +13,7 @@ namespace Masuit.Tools.Mvc.ActionResults
                 throw new ArgumentNullException(nameof(fileContents));
             }
 
-            FileContents = new MemoryStream(fileContents);
+            FileContents = new PooledMemoryStream(fileContents);
         }
 
         public ResumeFileContentResult(byte[] fileContents, string fileName, string etag) : this(fileContents, fileName)
@@ -20,4 +21,4 @@ namespace Masuit.Tools.Mvc.ActionResults
             EntityTag = etag;
         }
     }
-}
+}

+ 9 - 1
Masuit.Tools/Strings/ValidateCode.cs

@@ -5,6 +5,8 @@ using System.IO;
 using System.Security.Cryptography;
 using System.Text;
 using System.Web;
+using Masuit.Tools.Systems;
+
 namespace Masuit.Tools.Strings
 {
     /// <summary>
@@ -45,10 +47,13 @@ namespace Masuit.Tools.Strings
         {
             using Bitmap image = new Bitmap((int)Math.Ceiling(validateCode.Length * (fontSize + 2.0)), lineHeight);
             using Graphics g = Graphics.FromImage(image);
+
             //生成随机生成器
             Random random = new Random();
+
             //清空图片背景色
             g.Clear(Color.White);
+
             //画图片的干扰线
             for (int i = 0; i < 75; i++)
             {
@@ -67,6 +72,7 @@ namespace Masuit.Tools.Strings
                 new Font("宋体", fontSize, FontStyle.Bold | FontStyle.Italic),
                 new Font("楷体", fontSize, FontStyle.Bold | FontStyle.Italic)
             };
+
             //渐变.
             using var brush = new LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
             g.DrawString(validateCode, fonts[new Random().Next(fonts.Length)], brush, 3, 2);
@@ -81,9 +87,11 @@ namespace Masuit.Tools.Strings
 
             //画图片的边框线
             g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
+
             //保存图片数据
-            using MemoryStream stream = new MemoryStream();
+            using var stream = new PooledMemoryStream();
             image.Save(stream, System.Drawing.Imaging.ImageFormat.Jpeg);
+
             //输出图片流
             context.Response.Clear();
             context.Response.ContentType = "image/jpeg";

+ 3 - 5
Masuit.Tools/package.nuspec

@@ -2,16 +2,14 @@
 <package>
   <metadata>
     <id>Masuit.Tools.Net</id>
-    <version>2.6.8.2</version>
+    <version>2.6.8.3</version>
     <title>Masuit.Tools</title>
     <authors>懒得勤快</authors>
     <owners>masuit.com</owners>
       <projectUrl>https://github.com/ldqk/Masuit.Tools</projectUrl>
     <requireLicenseAcceptance>false</requireLicenseAcceptance>
-    <description>包含一些常用的操作类,大都是静态类,加密解密,反射操作,Excel简单导出,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。
-官网教程:https://ldqk.org/55
-
-
+    <description>全龄段友好的C#万能工具库,码数吐司库(适用于.NET Framework 4.6.1+项目),不管你是菜鸟新手还是骨灰级玩家都能轻松上手,包含一些常用的操作类,大都是静态类,加密解密,反射操作,权重随机筛选算法,分布式短id,表达式树,linq扩展,文件压缩,多线程下载和FTP客户端,硬件信息,字符串扩展方法,日期时间扩展操作,中国农历,大文件拷贝,图像裁剪,验证码,断点续传,集合扩展等常用封装。
+官网教程:https://tools.masuit.org
 github:https://github.com/ldqk/Masuit.Tools</description>
     <releaseNotes>如有问题请联系作者QQ:3444764617,或者到项目的github反馈问题,详细的API文档在github上:https://github.com/ldqk/Masuit.Tools</releaseNotes>
     <copyright>Copyright ©  懒得勤快</copyright>

+ 2 - 2
Test/Masuit.Tools.Abstractions.Test/Masuit.Tools.Abstractions.Test.csproj

@@ -14,8 +14,8 @@
 
   <ItemGroup>
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
-    <PackageReference Include="xunit" Version="2.6.2" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.4">
+    <PackageReference Include="xunit" Version="2.6.3" />
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
     </PackageReference>

+ 2 - 2
Test/Masuit.Tools.Core.Test/Masuit.Tools.Core.Test.csproj

@@ -12,8 +12,8 @@
     <PackageReference Include="Microsoft.AspNetCore.TestHost" Version="8.0.0" />
     <PackageReference Include="Microsoft.Extensions.Hosting" Version="8.0.0" />
     <PackageReference Include="Microsoft.NET.Test.Sdk" Version="17.8.0" />
-    <PackageReference Include="xunit" Version="2.6.2" />
-    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.4">
+    <PackageReference Include="xunit" Version="2.6.3" />
+    <PackageReference Include="xunit.runner.visualstudio" Version="2.5.5">
       <PrivateAssets>all</PrivateAssets>
       <IncludeAssets>runtime; build; native; contentfiles; analyzers</IncludeAssets>
     </PackageReference>

+ 6 - 6
Test/Masuit.Tools.Test/Masuit.Tools.Test.csproj

@@ -116,25 +116,25 @@
       <Version>4.5.0</Version>
     </PackageReference>
     <PackageReference Include="xunit">
-      <Version>2.6.2</Version>
+      <Version>2.6.3</Version>
     </PackageReference>
     <PackageReference Include="xunit.abstractions">
       <Version>2.0.3</Version>
     </PackageReference>
     <PackageReference Include="xunit.analyzers">
-      <Version>1.6.0</Version>
+      <Version>1.7.0</Version>
     </PackageReference>
     <PackageReference Include="xunit.assert">
-      <Version>2.6.2</Version>
+      <Version>2.6.3</Version>
     </PackageReference>
     <PackageReference Include="xunit.core">
-      <Version>2.6.2</Version>
+      <Version>2.6.3</Version>
     </PackageReference>
     <PackageReference Include="xunit.extensibility.core">
-      <Version>2.6.2</Version>
+      <Version>2.6.3</Version>
     </PackageReference>
     <PackageReference Include="xunit.extensibility.execution">
-      <Version>2.6.2</Version>
+      <Version>2.6.3</Version>
     </PackageReference>
   </ItemGroup>
   <Import Project="$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets" Condition="Exists('$(VSToolsPath)\TeamTest\Microsoft.TestTools.targets')" />

+ 6 - 3
Test/Masuit.Tools.Test/Mvc/Mocks/MockHttpRequest.cs

@@ -3,6 +3,7 @@ using System.Collections.Specialized;
 using System.IO;
 using System.Web;
 using System.Web.Routing;
+using Masuit.Tools.Systems;
 
 namespace Masuit.Tools.Test.Mvc.Mocks
 {
@@ -13,6 +14,7 @@ namespace Masuit.Tools.Test.Mvc.Mocks
         public override HttpFileCollectionBase Files { get; }
 
         public override RequestContext RequestContext => _context;
+
         public override string ApplicationPath => _applicationPath;
 
         public override System.IO.Stream InputStream
@@ -21,7 +23,7 @@ namespace Masuit.Tools.Test.Mvc.Mocks
             {
                 if (TestInput != null)
                 {
-                    var stream = new MemoryStream();
+                    var stream = new PooledMemoryStream();
                     var chars = TestInput.ToCharArray();
                     foreach (var c in chars)
                     {
@@ -29,11 +31,12 @@ namespace Masuit.Tools.Test.Mvc.Mocks
                     }
                     return stream;
                 }
-                return new MemoryStream();
+                return new PooledMemoryStream();
             }
         }
 
         public override string HttpMethod => TestHttpMethod;
+
         private readonly NameValueCollection _headers = new NameValueCollection();
         private readonly MockRequestContext _context = new MockRequestContext();
         private string _applicationPath;
@@ -58,4 +61,4 @@ namespace Masuit.Tools.Test.Mvc.Mocks
             return this;
         }
     }
-}
+}