Had no idea about that. Thanks for following it up!

On 25 March 2011 11:19, Mark Hurd <markeh...@gmail.com> wrote:

> Thanks for that clarification. However GoogleDesktop found my previous
> recollection discussing this was in the Microsoft NewsGroups, which
> now Googling for the subject of that exchange "Reflection and compiler
> inlining" found this other reply:
>
> On 2009-12-11 6:18, Alex Clark wrote:
> > Yes, because any method that calls MethodBase.GetCurrentMethod() will not
> be
> > inlined. This is because .GetCurrentMethod() includes a StackCrawlMark, a
> > special magical enum for methods that need to walk the stack (like
> > .GetCurrentMethod() predictably needs, to look for its caller) that
> prevents
> > the caller from being inlined. Trying to be clever by sticking the call
> in a
> > delegate like Mark did will not upset this, because methods that call
> delegates
> > are not inlined either.
>
> (as retrieved from
>
> http://www.eggheadcafe.com/software/aspnet/35469613/reflection-and-compiler-inlining.aspx
> but there are a number of clones of this info)
>
> So have things changed or was Alex Clark wrong?
> --
> Regards,
> Mark Hurd, B.Sc.(Ma.)(Hons.)
>
> On 25 March 2011 02:40, David Kean <david.k...@microsoft.com> wrote:
> > I chased this up with one the devs on the JIT team. He confirmed that the
> JIT/NGEN doesn't give this guarantee, both inlining and tail calls can cause
> Assembly.GetExecutingAssembly, Assembly.GetCallingAssembly and
> Method.GetCurrentMethod to return incorrect results. You can somewhat
> mitigate that by marking your method with NoInlining (to prevent inlining)
> and NoOptimization (to prevent the JIT spitting out tail calls)[1], however,
> it is still possible for this to return incorrect results in certain other
> situations.
> >
> >
> http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.methodimploptions.aspx
> >
> > -----Original Message-----
> > From: ozdotnet-boun...@ozdotnet.com [mailto:
> ozdotnet-boun...@ozdotnet.com] On Behalf Of David Kean
> > Sent: Tuesday, March 22, 2011 10:06 PM
> > To: ozDotNet
> > Subject: RE: Raising property changed events
> >
> > Hmm, I'll check internally, but I'd be surprised if we give that
> guarantee. We're free to change our inlining policy at any time, in fact, we
> did just that in 3.5 SP1 x64 which broke a lot of customers who were relying
> on Assembly.GetExecutingAssembly() without explicitly turning off inlining
> for the method.
> >
> > Whether you can repro something now, is not a good indication of whether
> we'll continue to support in a future service pack or version - always check
>  the docs. However, in saying that, the docs don't really make it clear that
> this might not work correctly in certain situations. In which case, if we
> don't give the above guarantee I'll make sure they call it out.
> >
> > -----Original Message-----
> > From: ozdotnet-boun...@ozdotnet.com [mailto:
> ozdotnet-boun...@ozdotnet.com] On Behalf Of Mark Hurd
> > Sent: Tuesday, March 22, 2011 9:36 PM
> > To: ozDotNet
> > Subject: Re: Raising property changed events
> >
> > On 23 March 2011 15:00, Mark Hurd <markeh...@gmail.com> wrote:
> >> I believe it was in this mailing list that we previously confirmed
> >> using GetCurrentMethod, even when included in convoluted ways,
> >> guarantees the method will not be inlined.
> >
> > Gmail says GetCurrentMethod has /not/ been mentioned before on this
> mailing list since I've been part of it, so I'm remembering that wrong.
> >
> >> Can you show an example where GetCurrentMethod does not return the
> >> expected method?
> >
> > This request still stands however.
> > --
> > Regards,
> > Mark Hurd, B.Sc.(Ma.)(Hons.)
>

Reply via email to