I would like to do some fairly basic program analysis on my .NET code (which is a combination of .dlls, .exe and C# code). Using Microsoft's Common Compiler Infrastructure, I first converted the code to it's IL form using which I would like to construct a call graph. Once I have the call graph, are there some standard tools that can be leveraged in order to gain insights in code complexity, identifying bottlenecks, memory footprint etc.? Any pointers would be really appreciated!
Code Analysis from Common Intermediate Language (CIL)
562 Views Asked by Sameer Agarwal At
1
There are 1 best solutions below
Related Questions in .NET
- Does compiler optimize operation on const variable and literal const number?
- What is the point of definnig Asp.net Intrinsic Objects In different places and what is the different betwen them?
- Deleting Orphans with Fluent NHibernate
- IOrderedEnumerable to vb.net IOrderedEnumerable Conversion
- What is this namespace ITypeOfObjectsBoundToListBox ? Couldn't find it
- .net rest service with JSON string and consumed with java client
- What is best way to check if any of the property of object is null or empty?
- Telerik's WPF RadColorPicker NoColorText property not working
- Possible consequences of duplicate ProgId for different classes
- How are multiple requests to Task.Run handled from a resource management standpoint?
- Optimizing C++ call from C#
- Make a per-web-application object available to Web API and SignalR controllers
- System.ComponentModel.DataAnnotations.Schema namespace conflict
- LINQ Except/Distinct based on few columns only, to not add duplicates
- Not displaying content by its URL string - absolute urls
Related Questions in OPTIMIZATION
- Does compiler optimize operation on const variable and literal const number?
- Optimizing for Social Leaderboards
- 3D FFT with data larger than cache
- Optimum directory structure for large number of files to display on a page
- How to make faster queries on my mysql table?
- Xib taking long time (>1s) to load. UIFont cache seems to blame
- How to speed up string comparisons in an array with a for loop?
- How to load all symbols from shared library on start up?
- Cython speed vs numpy
- Improve Speed of Piecewise Function in MATLAB
- How to check that all values are equal in array using recursion?
- PHP split string into known tokens and remaining words add to single-worded array
- Python: why is my O(n) slowing down as it progresses?
- Hint indexes to mysql on Join
- Error When Compiler Optimizations are on
Related Questions in PROFILER
- Visual Studio Profiler - how to see function body
- Visual Studio 2013 XSLT Profile
- How can I profile Signed Assemblies with VS 2012
- symfony2 logger in profiler
- Excel COM Add-in not loaded after using Visual studio performance profiler
- NoClassDefFoundError on ProfilerRuntimeObjLiveliness error when profiling on WildFly in Netbeans
- can LD_PRELOAD trick considered as a type of instrumentation?
- Score-P callpath depth limitation of 30 exceeded
- How can I ignore many endpoints in Skylight?
- java get peak of used heap memory
- How to attach profiler to docker process
- Find out which code run Entity Framework sql code
- Yourkit API heap dump analysis
- Can't install Silex webprofiler
- What else can be done with Rights to Run Sql Profiler
Related Questions in CIL
- Test if a given object reference is valid
- MSIL store a value of structure to return
- Changing internal class to public (CIL, Mono.Cecil)
- What is to be considered the "natural alignment" for OpCodes.Ldobj?
- Some questions about the usage of MethodImpl Attribute
- Probably redundantly opcode when explicit base type cast
- C# Getting PropertyInfo within setter using PropertyBuilder
- Properly emit property
- In the IL code produced, there are some lines missing. What task does the in between lines perform?
- Why is there no .NET RuntimePropertyHandle and PropertyInfo.GetPropertyFromHandle?
- How to diagnose "Type load failed" from PEVerify
- Are the placeholders of Generics compiled as an actual data type?
- msil ".maxstack 1" pushes more than 1 value
- CIL - How do I use a public static literal field?
- Why does tail call optimization need an op code?
Related Questions in CCI
- How to maintain EPI terminal connection from an EJB using CCI?
- Determining type of CollectionBase via Reflections (or Microsoft.Cci)
- CumulusCI TaskImportError: Cannot load Python class for task - No module named 'imp'
- How to replicate Pinescript results from CCI?
- Microsoft CCI based Obfuscator
- How to get same cci values from Trading view in Golang?
- Externalizing Properties so that deployment doesn't require code compilation
- Spring 5.3 deprecates CciTemplate
- How to read assembly from stream instead of file in Common Compiler Infrastructure
- Mono Cecil vs. PostSharp Core vs. Microsoft CCI for implementing AOP framework
- Microsoft CCI - resources, references for writing compilers
- Reflection.Emit equivalencies in CCI
- Using Roslyn Emit method with a ModuleBuilder instead of a MemoryStream
- Is there a CIL Static Analysis Library like ASM for Java Bytecode?
- Migrating custom Code Analysis rules to VS2012
Trending Questions
- UIImageView Frame Doesn't Reflect Constraints
- Is it possible to use adb commands to click on a view by finding its ID?
- How to create a new web character symbol recognizable by html/javascript?
- Why isn't my CSS3 animation smooth in Google Chrome (but very smooth on other browsers)?
- Heap Gives Page Fault
- Connect ffmpeg to Visual Studio 2008
- Both Object- and ValueAnimator jumps when Duration is set above API LvL 24
- How to avoid default initialization of objects in std::vector?
- second argument of the command line arguments in a format other than char** argv or char* argv[]
- How to improve efficiency of algorithm which generates next lexicographic permutation?
- Navigating to the another actvity app getting crash in android
- How to read the particular message format in android and store in sqlite database?
- Resetting inventory status after order is cancelled
- Efficiently compute powers of X in SSE/AVX
- Insert into an external database using ajax and php : POST 500 (Internal Server Error)
Popular Questions
- How do I undo the most recent local commits in Git?
- How can I remove a specific item from an array in JavaScript?
- How do I delete a Git branch locally and remotely?
- Find all files containing a specific text (string) on Linux?
- How do I revert a Git repository to a previous commit?
- How do I create an HTML button that acts like a link?
- How do I check out a remote Git branch?
- How do I force "git pull" to overwrite local files?
- How do I list all files of a directory?
- How to check whether a string contains a substring in JavaScript?
- How do I redirect to another webpage?
- How can I iterate over rows in a Pandas DataFrame?
- How do I convert a String to an int in Java?
- Does Python have a string 'contains' substring method?
- How do I check if a string contains a specific word?
I think what you want is pretty much impossible. The count of object allocations could vary wildly depending on specific input.
For example, imagine there was a method in your program that allocated a lot of objects, but it would run only under some condition. If your analysis was to asses the count of object allocations accurately, it would need to know whether the method ran. And the only way to do that is to actually evaluate that condition, which means you would actually need to run the program.
And memory footprint is probably even more difficult: it would require you to track the complete object graph and simulate the GC.
In short: the best way to find out performance characteristics of your program is to actually run it. Doing the same using static analysis would be hard and inaccurate. Don't forget that it's impossible to find out whether program completes using static analysis. I think what you want is even more difficult.