Skip to content

perf: reduce allocations in data-driven test execution hot path by @Evangelink in #9617 (backport to rel/4.3)#9619

Open
nohwnd-bot wants to merge 1 commit into
microsoft:rel/4.3from
nohwnd-bot:backport/9617/to/rel/4.3
Open

perf: reduce allocations in data-driven test execution hot path by @Evangelink in #9617 (backport to rel/4.3)#9619
nohwnd-bot wants to merge 1 commit into
microsoft:rel/4.3from
nohwnd-bot:backport/9617/to/rel/4.3

Conversation

@nohwnd-bot

Copy link
Copy Markdown

Backport of #9617 to rel/4.3

/cc @Evangelink

Combines four micro-optimizations in the MSTest adapter execution path:

- CloneForDataDrivenIteration: pass _properties directly to the ctor
  instead of building an intermediate snapshot Dictionary. The null/null
  ctor branch already takes a shallow copy, so one Dictionary + O(n) copy
  per data-driven iteration is removed. (microsoft#9602)

- ExecuteTestAsync: add a fast path when no ExecutionContext was captured
  by [AssemblyInitialize]/[ClassInitialize] (the common case). Skips the
  TaskCompletionSource + closure + Action delegate allocations and awaits
  the executor directly; the captured-context slow path is unchanged. (microsoft#9603)

- ReflectionTestMethodInfo.GetParameters(): cache the ParameterInfo[] since
  MethodInfo.GetParameters() allocates a fresh array on every call and the
  wrapped MethodInfo is immutable. (microsoft#9605, microsoft#9593)

- TestMethodInfo.ResolveArguments(): use the cached ParameterTypes property
  instead of calling MethodInfo.GetParameters() directly. (microsoft#9605)

- TestMethodRunner: reuse a single ReflectionTestMethodInfo wrapper across
  all data rows instead of allocating one per row. (microsoft#9605, microsoft#9593)

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@Evangelink Evangelink added the state/needs-review Awaiting review from the team. label Jul 5, 2026
@Evangelink Evangelink enabled auto-merge (squash) July 5, 2026 09:32
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

state/needs-review Awaiting review from the team.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants