Let’s recap. For about two months now, I’ve been working on a brand new profiling tool for .NET, C#, CLR, and all that jazz. It’s open source, completely free, and supports frameworks 2.0 and later (no 1.x, sorry). Some of the notable features include remote profiling, real time results analysis, and multiple visualizers. Today, the first public release, version 0.1.5, is available to the public.
Project Homepage
Direct Link to Installer
Although this is still an early version, it is already quite capable. It supports sampling mode profiling for both x86 and x64 applications, and provides views that will be familiar to users of NProf or dotTrace. Speaking of NProf, it’s my belief that this completely replaces it for .NET 2.0+, with a better UI and more features too. (And a far more lenient source code license as well.) There is still a lot to come, of course, but with this release I finally feel that this is ready for the general public.
I’m looking forward to getting lots of feedback, both positive and negative, and I hope that this is a useful tool for everyone.
(P.S. If you want to build from source, you’ll need to do it with a non-express version of VC++ 2008 SP1 and VC# 08, with a full boost installation. Also install the SQL Server Compact redist, which is in the repository under trunk\install\ExtraFiles.)
I’m going to be real dense here (and I expect you have a user guide on the way) but, how do you connect to an application? I’ve got a VS2005 console app running but when I click connect it just says “the server actively refused it”.
It can only connect to apps that have been run via the Run command, which causes the profiler backend to be loaded into the process. Unfortunately there’s no way to do this after the fact; that’s just how CLR is designed.
Ahh I see. I completely missed the Profiler > Run menu option (knew I being was dense).
I guess that means that I can’t profile ASP.NET apps with it, which is a shame, as I do a lot more web-based stuff than Windows-based.
Any plans to extend this to ASP.NET apps? Is it even possible?
ASP.NET is not supported yet, sadly. I do plan to support it just as soon as I figure out how. Same goes for services. Working on finding out right now actually.
Excellent work! Just have to say that you just made my day. I have been looking for something like this for quite a while!
You are the man! Keep up the good work, on both your Slim projects!
Very nice. Look forward to seeing where you go with this tool. Thank you!
Sounds very nice! Not being able to test it out at the moment, any idea if/how this will work with, let’s say, the Unity engine (www.unity3d.com)?
I’m not familiar enough with Unity to tell you much one way or the other, I’m afraid.
AFAIK Unity3D uses Mono, not MS .NET implementation. Mono has completely different profiling API:
http://www.mono-project.com/Performance_Tips
http://anonsvn.mono-project.com/viewvc/trunk/mono/mono/metadata/profiler.h?view=markup
So current SlimTune profiler won’t work it, but if somebody writes interface to SlimTune with Mono Profiler API, then you will be able to profile any Mono app.
Great start. Very useful. Keep up the good work!
Nice work. Seems to work well. Any chance to access the database schema ?
The file can be openend in Visual Studio. However, the Timings table is empty… So sad.
Timings was a test table for instrumentation, and doesn’t get any data in the release. Callers and Samples hold the actual sampling data, and then there’s Function and Classes that provide names, signatures, etc.
Thanks for the tip!
I can’t find the timing info, though. Is it stored somewhere in the database?
Since it’s sampling only right now, there’s no timing. The only available parameter is the hit count.
Samples: This is how many samples the function appeared in, not double counted. IOW, it’s time inclusive.
Callers: Records how many times a particular caller-callee pair showed up, and is double counted. 0 is recorded for callee at the top of stack, and caller at bottom of stack.
The percentages are just compiled from those two tables.
Thanks for this – looks promising! I will be watching and waiting for ASP.NET support.