Skip to content

Commit abfd13c

Browse files
committed
refactor: 使用流提高性能
1 parent 34194f1 commit abfd13c

1 file changed

Lines changed: 34 additions & 13 deletions

File tree

tools/BootstrapBlazor.CssBundler/Bundler.cs

Lines changed: 34 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
1-
// Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca). All rights reserved.
1+
// Copyright (c) BootstrapBlazor & Argo Zhang (argo@live.ca). All rights reserved.
22
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
33
// Website: https://www.blazor.zone or https://argozhang.github.io/
44

5-
using System.Text;
5+
using System.Buffers;
66

77
namespace BootstrapBlazor.CssBundler;
88

@@ -58,21 +58,42 @@ static void DoBundler(string bundlerFile, BundlerOptions option)
5858
return;
5959
}
6060

61-
using var writer = File.OpenWrite(Path.Combine(rootFolder, option.OutputFileName));
62-
foreach (var file in option.InputFiles)
61+
var buffer = ArrayPool<byte>.Shared.Rent(64 * 1024 * 1024);
62+
try
6363
{
64-
var inputFile = Path.Combine(rootFolder, file);
65-
if (!File.Exists(inputFile))
64+
using var writer = File.OpenWrite(Path.Combine(rootFolder, option.OutputFileName));
65+
foreach (var file in option.InputFiles)
6666
{
67-
continue;
68-
}
67+
var inputFile = Path.Combine(rootFolder, file);
68+
if (!File.Exists(inputFile))
69+
{
70+
continue;
71+
}
72+
73+
using var reader = File.OpenRead(inputFile);
74+
while (true)
75+
{
76+
var read = reader.Read(buffer, 0, buffer.Length);
77+
if (read == 0)
78+
{
79+
break;
80+
}
6981

70-
using var reader = File.OpenText(inputFile);
71-
var content = reader.ReadToEnd();
72-
writer.Write(Encoding.UTF8.GetBytes(content));
73-
reader.Close();
82+
if (reader.Position == read && read >= 3 && buffer[0] == 0xEF && buffer[1] == 0xBB && buffer[2] == 0xBF)
83+
{
84+
// skip bom
85+
writer.Write(buffer, 3, read - 3);
86+
continue;
87+
}
88+
writer.Write(buffer, 0, read);
89+
}
90+
}
91+
writer.Close();
92+
}
93+
finally
94+
{
95+
ArrayPool<byte>.Shared.Return(buffer);
7496
}
75-
writer.Close();
7697

7798
Console.WriteLine($"Bundler Completed .... {option.OutputFileName}");
7899
}

0 commit comments

Comments
 (0)