mirror of
https://github.com/wabbajack-tools/wabbajack.git
synced 2024-08-30 18:42:17 +00:00
Merge pull request #624 from wabbajack-tools/issue-620
Fixes for Virtual Memory errors
This commit is contained in:
commit
dec10387c4
@ -99,6 +99,7 @@ namespace Compression.BSA.Test
|
||||
|
||||
TestContext.WriteLine($"Reading {bsa}");
|
||||
string tempFile = Path.Combine("tmp.bsa");
|
||||
var size = File.GetSize(bsa);
|
||||
using (var a = BSADispatch.OpenRead(bsa))
|
||||
{
|
||||
await a.Files.PMap(Queue, file =>
|
||||
@ -120,7 +121,7 @@ namespace Compression.BSA.Test
|
||||
|
||||
Console.WriteLine($"Building {bsa}");
|
||||
|
||||
using (var w = ViaJson(a.State).MakeBuilder())
|
||||
using (var w = ViaJson(a.State).MakeBuilder(size))
|
||||
{
|
||||
var streams = await a.Files.PMap(Queue, file =>
|
||||
{
|
||||
|
@ -27,10 +27,10 @@ namespace Compression.BSA
|
||||
private List<IFileBuilder> _entries = new List<IFileBuilder>();
|
||||
private DiskSlabAllocator _slab;
|
||||
|
||||
public BA2Builder(BA2StateObject state)
|
||||
public BA2Builder(BA2StateObject state, long size)
|
||||
{
|
||||
_state = state;
|
||||
_slab = new DiskSlabAllocator();
|
||||
_slab = new DiskSlabAllocator(size);
|
||||
}
|
||||
|
||||
public void Dispose()
|
||||
|
@ -125,9 +125,9 @@ namespace Compression.BSA
|
||||
public EntryType Type { get; set; }
|
||||
public string HeaderMagic { get; set; }
|
||||
public uint Version { get; set; }
|
||||
public override IBSABuilder MakeBuilder()
|
||||
public override IBSABuilder MakeBuilder(long size)
|
||||
{
|
||||
return new BA2Builder(this);
|
||||
return new BA2Builder(this, size);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -25,14 +25,14 @@ namespace Compression.BSA
|
||||
internal uint _version;
|
||||
internal DiskSlabAllocator _slab;
|
||||
|
||||
public BSABuilder()
|
||||
public BSABuilder(long size)
|
||||
{
|
||||
_fileId = Encoding.ASCII.GetBytes("BSA\0");
|
||||
_offset = 0x24;
|
||||
_slab = new DiskSlabAllocator();
|
||||
_slab = new DiskSlabAllocator(size);
|
||||
}
|
||||
|
||||
public BSABuilder(BSAStateObject bsaStateObject) : this()
|
||||
public BSABuilder(BSAStateObject bsaStateObject, long size) : this(size)
|
||||
{
|
||||
_version = bsaStateObject.Version;
|
||||
_fileFlags = bsaStateObject.FileFlags;
|
||||
|
@ -163,9 +163,9 @@ namespace Compression.BSA
|
||||
|
||||
}
|
||||
|
||||
public override IBSABuilder MakeBuilder()
|
||||
public override IBSABuilder MakeBuilder(long size)
|
||||
{
|
||||
return new BSABuilder(this);
|
||||
return new BSABuilder(this, size);
|
||||
}
|
||||
|
||||
public string Magic { get; set; }
|
||||
|
@ -22,7 +22,7 @@ namespace Compression.BSA
|
||||
|
||||
public class ArchiveStateObject
|
||||
{
|
||||
public virtual IBSABuilder MakeBuilder()
|
||||
public virtual IBSABuilder MakeBuilder(long size)
|
||||
{
|
||||
throw new NotImplementedException();
|
||||
}
|
||||
|
@ -87,7 +87,7 @@ namespace Compression.BSA
|
||||
public uint HashOffset { get; set; }
|
||||
public uint VersionNumber { get; set; }
|
||||
|
||||
public override IBSABuilder MakeBuilder()
|
||||
public override IBSABuilder MakeBuilder(long size)
|
||||
{
|
||||
return new TES3Builder(this);
|
||||
}
|
||||
|
@ -14,11 +14,13 @@ namespace Wabbajack.Common
|
||||
private MemoryMappedFile _mmap;
|
||||
private long _head = 0;
|
||||
private string _name;
|
||||
private FileStream _fileStream;
|
||||
|
||||
public DiskSlabAllocator()
|
||||
public DiskSlabAllocator(long size)
|
||||
{
|
||||
_name = Guid.NewGuid().ToString();
|
||||
_mmap = MemoryMappedFile.CreateNew(null, (long)1 << 34);
|
||||
_file = new TempFile();
|
||||
_fileStream = _file.File.Open(FileMode.Create, FileAccess.ReadWrite);
|
||||
_mmap = MemoryMappedFile.CreateFromFile(_fileStream, null, size, MemoryMappedFileAccess.ReadWrite, HandleInheritability.None, false);
|
||||
}
|
||||
|
||||
public Stream Allocate(long size)
|
||||
@ -34,6 +36,8 @@ namespace Wabbajack.Common
|
||||
public void Dispose()
|
||||
{
|
||||
_mmap?.Dispose();
|
||||
_fileStream?.Dispose();
|
||||
_file?.Dispose();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,4 +1,5 @@
|
||||
using System;
|
||||
using System.ComponentModel.DataAnnotations;
|
||||
using System.Globalization;
|
||||
using System.IO;
|
||||
using System.Linq;
|
||||
@ -237,7 +238,9 @@ namespace Wabbajack.Lib
|
||||
Status($"Building {bsa.To}");
|
||||
var sourceDir = Path.Combine(OutputFolder, Consts.BSACreationDir, bsa.TempID);
|
||||
|
||||
using (var a = bsa.State.MakeBuilder())
|
||||
var bsaSize = bsa.FileStates.Select(state => File.GetSize(Path.Combine(sourceDir, state.Path))).Sum();
|
||||
|
||||
using (var a = bsa.State.MakeBuilder(bsaSize))
|
||||
{
|
||||
var streams = await bsa.FileStates.PMap(Queue, state =>
|
||||
{
|
||||
|
Loading…
Reference in New Issue
Block a user