-
Notifications
You must be signed in to change notification settings - Fork 64
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Reduce the performance impact of large amount instrumentation #269
Comments
The issue I have noticed is:
|
Thanks for reaching out @kellycampbe. Specifically for point 3: The more I think about it, I really think that a tree structure (assembly->class->method->signature), instead of a list, would help here. I think that we could quickly rule out 90% of methods based on the assembly alone, which would be a short operation. |
Description
The New Relic Profiler responds to CLR events for module loading and JIT compilation. It reads
Instrumentation.xml
files which identify the methods that are to be instrumented. The signatures of these methods are stored in a List (Set). When a JIT request is made for any function (instrumented or not), the list is consulted to see if the JITting function should have instrumentation instructions injected.This process is inefficient and causes performance impacts when this list is large. As a list, every search results in a linear scan of the list.
The problem is confounded by the fact that instrumentation is agent/system wide. So, it affects all processes on the server.
Recommendation
Steps to Reproduce
Your Environment
.NET Framework (but suspect it is also in .NET Core)
Additional context
[TIP]: # ( Add any other context about the problem here. For example, relevant community posts or support tickets. )
The text was updated successfully, but these errors were encountered: