static void _PurgeLuaScriptOnFinalize(string script) { var first = LuaScript.Prepare(script); var fromCache = LuaScript.Prepare(script); Assert.IsTrue(object.ReferenceEquals(first, fromCache)); Assert.AreEqual(1, LuaScript.GetCachedScriptCount()); }
private static void PurgeLuaScriptOnFinalizeImpl(string script) { var first = LuaScript.Prepare(script); var fromCache = LuaScript.Prepare(script); Assert.True(ReferenceEquals(first, fromCache)); Assert.Equal(1, LuaScript.GetCachedScriptCount()); }
public void PurgeLuaScriptOnFinalize() { const string Script = "redis.call('set', @PurgeLuaScriptOnFinalizeKey, @PurgeLuaScriptOnFinalizeValue)"; LuaScript.PurgeCache(); Assert.Equal(0, LuaScript.GetCachedScriptCount()); // This has to be a separate method to guarantee that the created LuaScript objects go out of scope, // and are thus available to be GC'd PurgeLuaScriptOnFinalizeImpl(Script); CollectGarbage(); Assert.Equal(0, LuaScript.GetCachedScriptCount()); LuaScript.Prepare(Script); Assert.Equal(1, LuaScript.GetCachedScriptCount()); }
public void PurgeLuaScriptOnFinalize() { const string Script = "redis.call('set', @PurgeLuaScriptOnFinalizeKey, @PurgeLuaScriptOnFinalizeValue)"; LuaScript.PurgeCache(); Assert.AreEqual(0, LuaScript.GetCachedScriptCount()); // This has to be a separate method to guarantee that the created LuaScript objects go out of scope, // and are thus available to be GC'd _PurgeLuaScriptOnFinalize(Script); GC.Collect(2, GCCollectionMode.Forced, blocking: true); GC.WaitForPendingFinalizers(); Assert.AreEqual(0, LuaScript.GetCachedScriptCount()); var shouldBeNew = LuaScript.Prepare(Script); Assert.AreEqual(1, LuaScript.GetCachedScriptCount()); }