posts - 644, comments - 2003, trackbacks - 137

My Links

News

Raffaele Rialdi website

Su questo sito si trovano i miei articoli, esempi, snippet, tools, etc.

Archives

Post Categories

Image Galleries

Blogs

Links

Riflessioni sul problema "StackTrace, Assembly e .NET"

In riferimento al mio precedente post, se effettivamente come penso Microsoft chiuderà la richiesta di Paolo come “by design”, questo riduce notevolmente le possibilità di usare StackTrace e compagnia bella dentro le applicazioni.

L'unico modo sicuro per ovviare al problema dell'inlining rimane quello di impedire che avvenga. I creatori del framewor, così come avviene in ogni piattaforma/compilatore ci hanno pensato e la cosa è fattibile in pieno stile dotnet. È sufficiente infatti decorare tutti i metodi che si vogliono risalire con StackTrace con questo attributo:

[MethodImplAttribute(MethodImplOptions.NoInlining)]

Resta il fatto che le performance possono rimanere seriamente degradate dal mancato uso di inlining, tanto più che l'attributo va posto su tutti i metodi che si prevede lo StackTrace debba risalire, il che non è poco.

Print | posted on lunedì 13 dicembre 2004 01:41 | Filed Under [ .NET [Italiano] ]

Feedback

Gravatar

# re: Riflessioni sul problema "StackTrace, Assembly e .NET"

Jon Skeet ha un esempio semplicissimo che dimostra l'effetto dell'inlining sulla stack trace:

using System;
using System.Diagnostics;
using System.Runtime.CompilerServices;

class Test
{
// [MethodImpl(MethodImplOptions.NoInlining)]
static StackTrace GetTrace(){
return new System.Diagnostics.StackTrace();
}

// [MethodImpl(MethodImplOptions.NoInlining)]
static StackTrace Intermediate(){
return GetTrace();
}

static void Main(){
Console.WriteLine (Intermediate());
}
}

Lasciando i commenti e compilando con:

csc /debug+ Test.cs

scrive:

at Test.GetTrace()
at Test.Intermediate()
at Test.Main()

mentre compilando con:

csc /debug- Test.cs

scrive:

at Test.Main()

Però, togliendo i commenti, scrive:

at Test.GetTrace()
at Test.Intermediate()
at Test.Main()

in tutti e due i casi.
13/12/2004 02:47 | Adrian Florea
Gravatar

# re: Riflessioni sul problema "StackTrace, Assembly e .NET"

Ciao Adrian, grazie del post.
Sono arrivato all'inlining quando ormai avevo già in mano la soluzione. Questo è uno di quei casi in cui google non mi ha potuto aiutare.
E poi (per una sorta di deformazione mentale tutta mia) volevo dimostrarlo con i fatti e non solo per via teorica.
In ogni caso l'esempio di John è un'ottima conferma che molto probabilmente a Paolo diranno che è un comportamento 'by design'.
13/12/2004 11:07 | Raffaele Rialdi
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET