Skip to content

Commit 9879cce

Browse files
committed
Massive performance boost using a memory mapped file
1 parent e913269 commit 9879cce

File tree

1 file changed

+22
-1
lines changed

1 file changed

+22
-1
lines changed

MHWMasterDataUtils/PackageReader.cs

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
11
using System;
22
using System.Collections.Generic;
33
using System.IO;
4+
using System.IO.MemoryMappedFiles;
45
using System.Linq;
6+
using System.Security;
57
using System.Text;
68
using System.Threading.Tasks;
79
using Microsoft.Extensions.Logging;
@@ -189,9 +191,28 @@ private void PreProcess()
189191
fileProcessor.PreProcess();
190192
}
191193

194+
private Stream GetFileStream(string filename)
195+
{
196+
try
197+
{
198+
using var mmf = MemoryMappedFile.CreateFromFile(filename, FileMode.Open);
199+
return mmf.CreateViewStream();
200+
}
201+
catch (SecurityException ex)
202+
{
203+
Console.WriteLine($"Insufficient access right to create memory mapped file: {ex.Message}");
204+
Console.WriteLine("Fallback to slow disk access.");
205+
206+
// Fallback on slow path.
207+
return File.OpenRead(filename);
208+
}
209+
}
210+
192211
private void ProcessPackageFile(string packageFullFilename)
193212
{
194-
using (reader = new BinaryReader(File.OpenRead(packageFullFilename), Encoding.UTF8, false))
213+
using Stream stream = GetFileStream(packageFullFilename);
214+
215+
using (reader = new BinaryReader(stream, Encoding.UTF8, false))
195216
{
196217
int totalParentCount = ReadHeader();
197218

0 commit comments

Comments
 (0)