add a bunch more performance improvements

filter provider becomes single instance and no longer has constructor parameters.

tokenizers use list and stringbuilder pools to reduce allocations.

system font finder becomes static to preserve file cache across all documents.
This commit is contained in:
Eliot Jones
2020-04-05 15:34:47 +01:00
parent 7baa18b5dd
commit f1be6634a7
20 changed files with 174 additions and 136 deletions

View File

@@ -2,18 +2,16 @@
{
using System;
using System.Collections.Generic;
using PdfPig.Filters;
using PdfPig.Tokens;
using PdfPig.Filters;
using Xunit;
public class DecodeParameterResolverTests
{
private readonly DecodeParameterResolver resolver= new DecodeParameterResolver(new TestingLog());
[Fact]
public void NullDictionary_Throws()
{
Action action = () => resolver.GetFilterParameters(null, 0);
Action action = () => DecodeParameterResolver.GetFilterParameters(null, 0);
Assert.Throws<ArgumentNullException>(action);
}
@@ -21,7 +19,7 @@
[Fact]
public void NegativeIndex_Throws()
{
Action action = () => resolver.GetFilterParameters(new DictionaryToken(new Dictionary<NameToken, IToken>()), -1);
Action action = () => DecodeParameterResolver.GetFilterParameters(new DictionaryToken(new Dictionary<NameToken, IToken>()), -1);
Assert.Throws<ArgumentOutOfRangeException>(action);
}
@@ -29,7 +27,7 @@
[Fact]
public void EmptyDictionary_ReturnsEmptyDictionary()
{
var result = resolver.GetFilterParameters(new DictionaryToken(new Dictionary<NameToken, IToken>()), 0);
var result = DecodeParameterResolver.GetFilterParameters(new DictionaryToken(new Dictionary<NameToken, IToken>()), 0);
Assert.Empty(result.Data);
}

View File

@@ -8,7 +8,7 @@
public class FlateFilterTests
{
private readonly FlateFilter filter = new FlateFilter(new DecodeParameterResolver(new TestingLog()), new PngPredictor(), new TestingLog());
private readonly FlateFilter filter = new FlateFilter();
[Fact]
public void EncodeAndDecodePreservesInput()

View File

@@ -100,7 +100,7 @@
{NameToken.DecodeParms, paramsDict}
});
var filter = new FlateFilter(new DecodeParameterResolver(null), new PngPredictor(), null);
var filter = new FlateFilter();
var filtered = filter.Decode(streamBytes, dictionary, 0);
var expected =