posts - 504, comments - 1656, trackbacks - 139

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 domenica 12 dicembre 2004 23.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 0.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 9.07 | Raffaele Rialdi

Post Comment

Title  
Name  
Email
Url
Comment   
Please add 8 and 4 and type the answer here:

Powered by: