[C#] Precaricare metodi pubblici in memoria...si può?

martedì 07 ottobre 2008 - 09.29

macillo Profilo | Newbie

Salve a tutti, sono nuovo del forum e vi faccio gia' da ora i complimenti perchè siete molto preparati (ho gia' letto qualche post qua e la).

Vi scrivo per chiedervi un quesito particolare. Sto imparando a sviluppare applicazioni in C# su Windows Embedded 6.0 (o Windows CE, sono sinonimi) e vorrei sapere se secondo voi è possibile attuare una idea che mi circola per la testa: in pratica, all'avvio di una applicazione (che sia console o meno non importa) vorrei "precaricare" in memoria alcuni metodi pubblici che poi andrei a chiamare successivamente durante l'utilizzo dell'applicazione stessa.
Questo precaricamento in memoria avviene quando l'applicazione viene avviata, in tal modo richiamando i metodi gia' precaricati si otterrebbe un miglioramento dei tempi di risposta dell'applicazione ovvero, in termini generali, l'aumento della sua velocita' di esecuzione.
Ci sto pensando da qualche giorno e non so come posso fare per attuare questa cosa, qualcuno di voi ha qualche suggerimento? So che sto chiedendo qualcosa che forse è impossibile, ma tanto vale tentare.

Grazie per qualsiasi aiuto mi darete

Ciao!

rossimarko Profilo | Guru

Ciao,

la tua esigenza è quella di caricare dei valori in memoria?
In questo caso puoi creare una classe con dei parametri statici (http://msdn.microsoft.com/en-us/library/79b3xss3.aspx). All'inizio popolerai i valori di questa classe con i dati che ti servono e poi potrai riutilizzarli all'interno della tua applicazione.

Ti posto una classe di esempio:
public static class Parametri { public static string Parametro1 = "Non valorizzato"; public static DateTime Parametro2; }

Per accedere ai dati di questa classe dovrai semplicemente scrivere:
Parametri.Parametro1 = "Parametro valorizzato";
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

macillo Profilo | Newbie

No, purtroppo non devo caricare solo dei valori, ma un intero metodo. Successivamente chiamero' il metodo invocandolo in qualche modo, tale metodo essendo gia' pronto non necessita di essere compilato perchè è gia' disponibile (w non dovra' essere stato scaricato dalla memoria tramite le operazioni di garbage collector).

Intanto pero' ti ringrazio, vado a vedere il link che mi hai segnalato.

rossimarko Profilo | Guru

Ma questo metodo cosa deve fare? Perchè se deve fare delle elaborazioni per tornare dei valori basta salvare questi valori in qualche variabile e poi utilizzare sempre quelle...
Al massimo puoi sempre fare questa operazione all'interno del metodo, ovvero prima verifichi se la variabile è valorizzata, se non lo è la popoli e poi ritorni il valore. Altrimenti se la variabile è già valorizzata la ritorni senza eseguire nessuna elaborazione
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

macillo Profilo | Newbie

Il problema di memorizzare una variabile è secondario per ora, la questione principale riguarda la memorizzazione tutto cio' che fa un metodo, ad esempio creazione di finestre, calcoli, richieste di input da tastiera e visualizzazione di stringhe o qualsiasi altra operazione. Ovvero, vorrei sapere se è possibile eseguire una volta sola un metodo e poi mantenerlo in "stand-by" nella memoria ram per poi richiamarlo in un secondo momento. Richiamandolo dalla memoria esso è gia' pronto e non necessita di essere ricompilato.

rossimarko Profilo | Guru

>Richiamandolo dalla memoria esso è gia' pronto e non necessita
>di essere ricompilato.

Il metodo viene eseguito ogni volta che lo richiami (la compilazione avviene solo una volta). Purtroppo non puoi mettere in cache l'esecuzione. Se ad esempio hai un metodo che modifica il colore di un bottone tutte le volte che lo richiami le istruzioni all'interno del metodo vengono eseguite. L'unica cosa che puoi fare è evitare di fare continuamente delle chiamate pesanti salvandoti appunto i valori ritornati in variabili locali (sempre che la logica dell'applicazione lo permetta), ma nel tuo caso se si tratta di modifiche da fare all'interfaccia quelle per forza di cose vengono eseguite tutte le volte
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

macillo Profilo | Newbie

Ma se la compilazione avviene solo una volta, il codice gia' compilato per quanto tempo rimane disponibile?

Ora, non è perchè io non mi fidi di te, ma per una semplice questione di principio: dove trovo scritto che non è possibile fare quello che vorrei fare io? Cioè dove posso trovare della documentazione dettagliata che spieghi il funzionamento della compilazione di applicazioni con codice gestito? Sul sito Msdn avevo gia' trovato qualcosa ma non era sufficiente, ora mi serve qualcosa in piu'...

Grazie

rossimarko Profilo | Guru

Ti giro un po' di link di approfondimento:
Innanzitutto la compilazione Just In Time (JIT): http://it.wikipedia.org/wiki/Compilatore_just-in-time

Poi altri link relativi alle performance:
http://msdn.microsoft.com/en-us/library/ht8ecch6.aspx
http://msdn.microsoft.com/en-us/magazine/cc163791.aspx
http://msdn.microsoft.com/en-us/library/aa446542.aspx
http://blogs.msdn.com/netcfteam/archive/2005/05/04/414820.aspx
http://blogs.msdn.com/ryanms/pages/net-compact-framework-jit-performance.aspx

Se le tue esigenze sono di avere performance molto spinte valuta anche la possibilità di scrivere le tue routine in C/C++ però ovviamente i tempi di sviluppo e le considerazioni da fare sono ben diverse
-----------------------------------------
Rossi Marco
http://blogs.dotnethell.it/rossimarko

macillo Profilo | Newbie

Grazie per la disponibilita' e la gentilezza.
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2023
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5