k state repository performance improvement. We'll now flush the updates every so often, now.

This commit is contained in:
mlemanczyk committed 2026-01-25 01:35:19 +01:00
1 parent f864e73f67
commit 5eee2cd4a0
1 file changed
+8
@@ -58,6 +58,8 @@ public sealed class KStateRepository : IDisposable
}); });
} }
private volatile int _flushCount;
public void Upsert(ulong prime, BigInteger k) public void Upsert(ulong prime, BigInteger k)
{ {
using var session = _store.For(new SimpleFunctions<string, string>()).NewSession<SimpleFunctions<string, string>>(); using var session = _store.For(new SimpleFunctions<string, string>()).NewSession<SimpleFunctions<string, string>>();
@@ -65,9 +67,15 @@ public sealed class KStateRepository : IDisposable
string valueString = k.ToString(CultureInfo.InvariantCulture); string valueString = k.ToString(CultureInfo.InvariantCulture);
session.Upsert(keyString, valueString); session.Upsert(keyString, valueString);
session.CompletePending(true); session.CompletePending(true);
var flushCount = ++_flushCount;
if (flushCount >= PerfectNumberConstants.ByDivisorStateSaveInterval)
{
_flushCount = 0;
_store.Log.FlushAndEvict(wait: true); _store.Log.FlushAndEvict(wait: true);
} }
}
public bool TryGet(ulong prime, out BigInteger value) public bool TryGet(ulong prime, out BigInteger value)
{ {
using var session = _store.For(new SimpleFunctions<string, string>()).NewSession<SimpleFunctions<string, string>>(); using var session = _store.For(new SimpleFunctions<string, string>()).NewSession<SimpleFunctions<string, string>>();