perf(scripting): cache ScriptSandbox BCL + pinned metadata references (#603)
Claude-Session: https://claude.ai/code/session_01Ef2ozxS7QPanGT8uoATbTe
This commit is contained in:
@@ -57,4 +57,18 @@ public sealed class ScriptSandboxBuildTests
|
||||
"""return (double)ctx.GetTag("X").Value;""");
|
||||
evaluator.ShouldNotBeNull();
|
||||
}
|
||||
|
||||
/// <summary>#603: the BCL reference set is built once per process, so two Build calls share the same
|
||||
/// <c>MetadataReference</c> instances rather than re-reading ~170 DLLs per compile.</summary>
|
||||
[Fact]
|
||||
public void Build_reuses_metadata_reference_instances_across_calls()
|
||||
{
|
||||
var first = ScriptSandbox.Build(typeof(ScriptContext));
|
||||
var second = ScriptSandbox.Build(typeof(ScriptContext));
|
||||
|
||||
first.References.Count.ShouldBeGreaterThan(50);
|
||||
first.References.Count.ShouldBe(second.References.Count);
|
||||
for (var i = 0; i < first.References.Count; i++)
|
||||
ReferenceEquals(first.References[i], second.References[i]).ShouldBeTrue($"reference {i} was rebuilt");
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user