venerdì 3 luglio 2009

Dependency walker... Scoprire le dependencies di una dll....

Spesso un programma non parte con la segnalazione "impossibile caricare l'assmbly xxxx o una delle sue dipendenze..."

Ok, l'assembly xxxx c'è, è li, lo vedo... cos'altro vuole?

Il programmino free che si può scaricare da qui http://www.dependencywalker.com/ consente di scoprire quali DLL vengono referenziate da una DLL, ricorsivamente analizza le dependencies e quindi indica se c'è qualcosa che non va.

mercoledì 10 giugno 2009

Performance, quanto pesa un try/catch? (.NET)

In questi giorni sono entrato in una discussione dove si è cominciato a valutare il "peso" di un blocco try / catch.
Se un puro blocco try/catch, non usato non costa nulla, utilizzarlo erroneamente ha un peso enorme.
Per dimostrare questo codice ho utilizzato un profiler ed un piccolo codice .NET che conteneva queste due funzioni:

public static int NoCatch(object data)


{


    if (data != null)


    { return (int)data; }

    else


    { return 1; }


}



public static int WithCatch(object data)


{


    try


    {


        return (int)data;


    }


    catch


    {


        return 1;


    }


}




Come si può vedere la funzione WithCatch(object data) utilizza il try per gestire una condizione di errore generica, mentre il primo blocco di codice utilizza un semplice if per evitare l'errore.
Ebbene, quali sono i risultati? Eccoli:


TryCatchTest.Program.TestNoCatch(int64,object) : 0.17


TryCatchTest.Program.TestWithCatch(int64,object) : 491.77



Beh... su 10000 elaborazioni per metodo, quasi il % del tempo è stato utilizzato dalla seconda funzione.

giovedì 31 luglio 2008

Troncare il file di log di un database Microsoft SQL

Con SQL 2000 sono sempre incappato nel problema dell'incremento automatico delle dimensioni del file di log del database, infatti per impostazione predefinita il file LDF cresce continuamente di dimensioni, fino a raggiungere le dimensioni massime impostate nel database, o peggio, fino a terminare lo spazio su disco.

Questa situazione si crea semplicemente perchè il file LDF tiene traccia di tutte le transazioni effettuate, anche se correttamente committate.

Per risolvere questo problema è sufficiente lanciare il comando:

DBCC BACKUP LOG [database name] WITH TRUNCATE_ONLY

semplice, immediato e soprattutto, risolutivo.

via: merlinox.tumblr.com

giovedì 17 luglio 2008

Riavvio rapido dei servizi

Sviluppando applicazioni che svolgono attività batch in ambiente microsoft, ci si trova immancabilmente a lavorare con i servizi di windows.

Con questo tipo di programmi il modo di lavorare cambia leggermente, e così non potendo più avviare le applicazioni con l'ambiente di sviluppo, ci si scontra spesso e volentieri con la scomoda interfaccia di gestione dei servizi.

Beh, così scomoda alla fine non è, ma lavorando e debuggando queste applicazioni ci si trova a fermarle e avviarle centinaia di volte al giorno.

Per poter quindi fermare e avviare i servizi con un solo click, si può tranquillamente creare un file .bat con queste 3 righe di codice:

net STOP "service name"
pause
net START "service name"


Il pause tra i due comandi è fondamentale, infatti operativamente si lancerà questo comando, appena il servizio è stoppato sarà possibile compilare l'eseguibile e, a compilazione completata con un solo invio nella schermata DOS aperta, sarà possibile riavviare il servizio.

Comodo, pratico e rapido...

martedì 15 luglio 2008

SandBoxie, un ambiente protetto per eseguire software

Qualche tempo fa, scaricando un software dalla rete mentre avevo l'antivirus poco aggiornato ho infettato il mio pc con un poco gradevole troian.Da allora, oltre a risolvere il problema dell antivirus, ho cominciato ad eseguire i file sospetti in un ambiente protetto. Tengo sempre a portata di mouse una macchina virtuale da avviare all'occorrenza e, una volta testato e controllato il software lo utilizzo sulla macchina reale.
Da pochi giorni ho scoperto una soluzione molto più pratica.

Il software sandboxie infatti si occupa di eseguire un particolare software da voi scelto, in una "scatola chiusa" non consentendo al processo eseguito di accedere direttamente alla scrittura del disco.
Immagine http://www.sandboxie.com/

Molto più pratico di una lenta macchina virtuale, e tutto sommato efficace.

giovedì 10 luglio 2008

Il mio PC ha un buco nero!!!!

Ho guardato il mio PC e ho trovato i seguenti componenti...

- Sfoglia tutta la rete
- Risorse di rete bluetooth
- Ricerca nuovo hardware
- Svuota cestino
- Cancella i Temporary internet files...
...

cos'hanno in comune queste cose?
Beh... non importa quanto il vostro pc sia potente, quanti processori sono disponibili o quanta ram è installata, utilizzare questi componenti renderà il PC inutilizzabile per un breve periodo, spesso arbitrario...

Insomma... sono accessi ad un un buco nero per le prestazioni...

venerdì 15 febbraio 2008

Emettere un alert a seguito di un postback

Programmando applicazioni web ci si trova spesso nella condizione di voler comunicare qualcosa all'utilizzatore in maniera evidente, attirando l'attenzione su una condizione particolare, o su un errore.

In windows form utilizzeremmo il classico messagebox, comodo, pieno di opzioni e molto pratico.

Nelle pagine ASP.NET invece dobbiamo emettere il codice javascript per far visualizzare un alert js contenente il messaggio del caso.

Ho scritto quindi una comodissima funzione nelle pagine web che assomiglia molto alla seguente:

public void MessageBoxScriptInject(string messageToShow)
{
// lo rendo comatibile con javascript...
string messageTranslated =
messageToShow.Replace("'", "\\'");
messareTranslated =
messareTranslated.Replace("\n", " ");
messareTranslated =
messareTranslated.Replace("\r", " ");

// creo il javascript
System.Text.StringBuilder js =
new System.Text.StringBuilder();
js.AppendLine("
window.alert('" +
messareTranslated + "');");

// inietto il codice nella pagina (sintassi .NET 2.0)
this.ClientScript.RegisterStartupScript(
typeof(string),
Guid.NewGuid().ToString(),
js.ToString(),
true);
}