27. November 2009

SQL Statements um einen SQLServer-Trace aus einer Tabelle zu analysieren

Generellen Analysen:
SELECT
   Duration as DurationInMicroSeconds,  
   DATALENGTH(TextData) as len,
   CPU,
   Reads,
   Writes,
   TextData  
FROM
   trc_table01
WHERE
   TextData IS NOT NULL
order by duration desc;


SELECT
   AVG(Duration) as AVGDuration,
   AVG(READS) AS AVGReads,
   AVG(CPU) AS AVGCPU,
   COUNT(*) AS TotalStatements
   
FROM
   trc_table01   
WHERE
   TextData IS NOT NULL;


SELECT COUNT(*) AS NO_SQLSTATEMENTS_CPU_MORE_THAN_ZERO, AVG(CPU) AS AVG_CPU
FROM
   trc_table01
WHERE CPU>0
AND TextData IS NOT NULL;


Nach einem speziellen Teil suchen
SELECT
COUNT(CAST(TextData AS nvarchar(MAX))),
CAST(TextData AS nvarchar(MAX)) AS x
FROM
TRACETABLE
WHERE
TextData LIKE '%SUCHBEGRIFF%'
GROUP BY
CAST(TextData AS nvarchar(MAX))
ORDER BY
1 DESC

25. November 2009

Track Project Item ein-/ausschalten in VisualStudio

1.) Über die Options in VisualStudio kann man dauerhaft die Einstellung machen:








2.)Über ein Macro kann man in VisualStudio das aktuell gewählte Sourcefile im SolutionExplorer automatisch auswählen lassen. Dazu einfach einfach folgenden Code in ein Macro kopieren
DTE.ExecuteCommand("View.TrackActivityInSolutionExplorer")
und damit einen Button definieren. Darüber lässt sich das Feature dann auch wieder ausschalten.

3.)Mit dem Resharper geht es nocht bequemer: Einfach
SHIFT+ALT+L
drücken, dann navigiert der SolutionExlorer zum aktuell ausgewählten Codefile.

16. November 2009

VisualStudio RemoteDebugging zwischen zwei Domains

Will man mit VisualStudio RemoteDebugging zwischen zwei Rechnern betreiben, die in unterschiedlichen Domains sitzen, muss folgendes beachtet werden:

  • Auf dem Remote-Rechner (z.B. mit DNS-Name remoterechner.remotedomain) einen Domain-User anlegen (z.B: REMOTEDOMAIN\MYUSER01)
  • Auf dem Rechner mit VisualStudion einen lokalen(!) User anlegen (z.B: VS01\MYUSER01) mit gleichem Namen/Passwort
  • Mit dem Domain-User den MSVSMON starten (liegt im VisualStudio-Verzeichnis unter Common7\IDE\Remote Debugger\x86\msvsmon.exe, dieser kann z.B. per Share zugänglich gemacht werden) auf dem Remote-Rechner mit dem zu debuggenden Prozess starten.
  • VisualStudio auf dem anderen Rechner mit dem lokalen Benutzer VS01\MYUSER01 starten
  • Im Debuggin-Menüt "Attach to process" wählen. (Transport: Default, Qualifier: REMOTEDOMAIN\myuser01@remoterechner.remotedomain)
Alternative: 2 lokale Benutzer mit gleicher Userid/Passwort-Kombination (wenn beide keine DomainController sind)

Die PDBs des zu debuggenden Moduls müssen auf dem Zielrechner im GAC liegen. Das Modul sollte mit "DEBUG" in VisualStudio gebuildet werden, sonst kann es sein, dass nicht alle Variablenwerte im Debugger sichtbar sind (OPTIMIZED).

Hinweis: Wenn man mit z.B. VS 2008 debuggen möchte, muss man auch den RemoteDebugger aus dem VS 2008 Verzeichnis nehmen.

13. November 2009

LOG4NET erzeugt doppelte Einträge

Problem: Log4NET erzeugt doppelte Einträge

Ursache: Log4NET verhält sich anders als LOG4J. Wird ein Appender zweimal referenziert werden
die Einträge verdoppelt.
<root>
<level value="ERROR" />
<appender-ref ref="MyFileAppender" />
</root>
<logger name="Some.Logger" additivity="false">
<level value="INFO" />
<appender-ref ref="MyFileAppender" />
</logger>

Lösung: Ein Appender darf nur einmal definiert werden. Some.Logger erbt in diesem Fall von Root und schreibt dadurch in MyFileAppender
<root>
<level value="ERROR" />
<appender-ref ref="MyFileAppender" />
</root>
<logger name="Some.Logger" additivity="false">
<level value="INFO" />
</logger>

Stacktrace in .NET ausgeben

Console.Write(Environment.StackTrace);

11. November 2009

.NET Framework Versionen

Die genauen Versionen der installierten .NET Frameworks kann man am besten aus der Registry auslesen. Unter dem Key
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP
finden sich die verschiedenen Frameworks als Unterordner (v1.1.x,v2.0.x,v3.0,v3.5).
Der relevante Schlüssel ist "Version".

Siehe auch http://msdn.microsoft.com/en-us/library/cc160716.aspx