Ayende @ Rahien

Hi!
My name is Ayende Rahien
Founder of Hibernating Rhinos LTD and RavenDB.
You can reach me by phone or email:

ayende@ayende.com

@

Posts: 5,949 | Comments: 44,546

filter by tags archive

L2S Prof hardships – getting query duration and row counts


I really want to be able to provide duration & row count for Linq to Sql. It has became a personal goal of mine.

The problem is that there is absolutely no open extensibility points within L2S that would allow it. The solution is… to  break down the wall. If you don’t have extensibility points, then I will make some.

image

And, you know what? I did:

image

The problem is that it took almost 12 hours to get it to this point, and along the way I had to build a new provider for Linq to Sql. And yes, that is not possible. Not isn’t supposed to be possible, just is not possible.

To get this to work I had to build a hack on top of a crack on top of a very angry duck.

image

I have been working on this for the last 12 hours, and this is about the most unsupported method that you could find to hook into things (I had to break the CLR type system to get this to work, and the things that I do with reflection are probably amoral in at least three different religions).

The problem with going with that route is that now I have to delay the public beta for L2S Prof. The good thing is that I can now provide additional information about Linq to SQL.


Comments

dan
dan

ha! best post ever!

Imran

Wonder if there is anyway to hook in to the client statistics that are generated when queries are run (e.g. the stats the management studio shows when you turn on the 'include client statistics' option).

Ayende Rahien

Imran,

That is probably too expensive to do on tool that emphasis low footprint on the profiled app

Dan L

That's hilarious. In my experience with L2S, coercive hook ins have become a somewhat typical necessity.

Chris Smith

Another reason B&D languages should go away! It makes it hard for you to get to the good stuff (and change it).

Bring on C# 6... which will resemble python with a C syntax.

tobi

@"Chris Smith": There is a reason the stuff ayende changed using reflection is private. Imagine everything would be public: People would rely on internals all the time. The .net framework code would be unchangeable in even the simplest detail.

Fabian Schmied

Okay, I'll give in and ask the question: What do you mean by you "had to break the CLR type system to get this to work"?

I'd guess you could do a few things by using transparent proxies and injecting them via reflection, but I wouldn't consider this as a breaking of the type system.

You could also use Reflection.Emit to implement some internal interfaces (hoping that the accessibility flags won't be verified at runtime, of which I'm not sure). This actually is cheating the type system (if it works), but I'm not sure whether this is what you did.

So what's behind that ominous phrase? :)

Ayende Rahien

Fabian,

You can't actually implement internal interfaces using SRE, that is the first thing that I tried, and it doesn't work.

What I mean by breaking the type system is creating a type that lies about what it is.

When you ask it "are you a Foo", it will say yes, and when you ask it, "are you Bar" (totally unrelated to Foo) it will say yes as well.

It is a lying type, basically, and a nasty one that relies on specific usage pattern.

Harry S.

Once again, the blogs tagline is very apt.

Bee
Bee

Ayende, can you detail the process a little bit more?

In a topic complete away from profiller stuff, I have great interest in such thing

Comment preview

Comments have been closed on this topic.

FUTURE POSTS

  1. The RavenDB Comic Strip: Part III – High availability & sleeping soundly - 3 hours from now

There are posts all the way to May 28, 2015

RECENT SERIES

  1. The RavenDB Comic Strip (3):
    20 May 2015 - Part II – a team in trouble!
  2. Special Offer (2):
    27 May 2015 - 29% discount for all our products
  3. RavenDB Sharding (3):
    22 May 2015 - Adding a new shard to an existing cluster, splitting the shard
  4. Challenge (45):
    28 Apr 2015 - What is the meaning of this change?
  5. Interview question (2):
    30 Mar 2015 - fix the index
View all series

RECENT COMMENTS

Syndication

Main feed Feed Stats
Comments feed   Comments Feed Stats