[ASP].NET Worst Practices – záznam, slides a dema [Prague .NET Meetup 02/2016]

Slides a dema z mé přednášky pro setkání Prague .NET Meetup ze 17.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • Garbage Collector, Finalization, C# Destructors, Resource Wrapper pattern
  • Process Failure, StackOverflow, Windows Debugger, DebugDiag
  • <compilation debug=“true|false“ />, <deployment retail=“true“/>
  • ASP.NET Over-posting / Mass-assignment
  • skládání stringů vs. StringBuilder
  • vyhledávání v datech – List vs. BinnarySearch vs. Dictionary vs. LINQ ToLookup()
  • perly code-review

[ASP].NET Performance Tuning – záznam, slides a dema [ShowIT SK 02/2016]

Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 9.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • ASP.NET Sessions
  • skládání stringů vs. StringBuilder
  • vyhledávání v datech – List vs. BinnarySearch vs. Dictionary vs. LINQ ToLookup()
  • reflexe + dynamic
  • ASP.NET Data Cache + Output Cache
  • SQL DMVs
  • YSlow

Advanced Debugging .NET – záznam, slides a dema [ShowIT SK 02/2016]

Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 10.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • StackOverflow troubleshooting
  • Windows Debugger, SOS, DebugDiag
  • Prozkoumávání zásobníku
  • Prozkoumávání haldy, rootů, finalization queue
  • GC Root identification (static fields)

ASP.NET Core MVC6 – TagHelpers & VisualComponents – záznam, slides a dema [ShowIT SK 02/2016]

Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 9.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • Představení TagHelpers
  • Přehled TagHelpers připravených v ASP.NET Core MVC6 (RC1)
  • Tvorba vlastních TagHelpers
  • Představení ViewComponents
  • Tvarba vlastních ViewComponents

.NET Memory Internals – záznam, slides a dema [ShowIT SK 02/2016]

Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 9.2.2016:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • Zásobník (Stack)
  • Hodnotové vs. referenční datové typy
  • Volání metod s předáváním parametrů hodnotou vs. referencí
  • Halda (Heap)
  • Garbage Collection

V případě zájmu o dané téma doporučuji shlédnou samostatné dvě přednášky, kde bylo o trochu více časového prostoru:

Code Analyzers vs. generovaný kód

Pomocí analyzérů ve VS 2015 máme možnost kontrolovat programový kód různými pravidly ověřující štábní kulturu kódu. Netestuje se tedy, zda kód dělá to, co má, ale zejména to, jak je zapsán. Ale i to dokáže občas odhalit chyby v chování programu.
V aplikacích je však nejen kód ručně psaný programátory, ale často i kód generovaný různými nástroji (designer soubory od resources, aspx, atp.)

Takový kód často nesplňuje pravidla, které na vlastní kód klademe, a zároveň nemáme možnost způsob generování ovlivnit.

Jedno možností je použít global suppressions (viz Code Analysis na stránce https://www.visualstudio.com/en-us/news/vs2015-update1-vs.aspx), druhou možností je vypnout kontrolu generovaného kódu ve vlastnostech projektu.

codeanalysis

To však přináší zmatek v tom, co který analyzér považuje za generovaný kód. Pro určení, zda jde o generovaný kód používají různé nástroje různé techniky, například

  • dle pojmenování souboru
  • dle obsahu souboru – komentář s <auto-generated />
  • nebo dle obsahu souboru – attributy u třídy

StyleCop Analyzers

Jako generovaný kód označují kód souboru (zdroj):

  • jehož název končí na .designer.cs
  • nebo obsahuje v komentáři text <auto-generated či <autogenerated
  • nebo je soubor prázdný.

SonarLint for Visual Studio 2015

Jako generovaný kód označují kód (zdroj):

  • souboru, jehož název obsahuje .g., .generated., .designer., .generated., _generated. nebo temporarygeneratedfile_
  • nebo obsahuje v komentáři text <auto-generated či <autogenerated
  • nebo je třída odekorována atributem DebuggerNonUserCode, GeneratedCode, ExcludeFromCodeCoverage či CompilerGenerated.

Code Analyzers

Neobsahují žádnou logiku pro odlišení generovaných souborů od ostatních (nebo se mi ji alespoň v čase, který jsem hledání byl ochoten věnovat, žádnou nenašel).

(zdroj)

Srovnání analyzérů

Tabulka ukazuje, které analyzéry považují jaký soubor za generovaný (ano = generovaný, ne = nerozpoznáno):

.designer.cs
(název souboru)
// <auto-generated>
(obsah souboru)
[GeneratedCode]
(obsah souboru)
Code Analyzers  ne ne ne
StyleCop Analyzers ano ano ne
Sonar Lint ano ano ano

Visual Studio:“The XY has already been declared.“ (XSD)

Pokud ve Visual Studiu editujete XML soubory, ke kterým máte XSD schema, můžete se dočkat hlášek typu:

  • The global element ‚…‘ has already been declared.
  • The complexType ‚…‘ has already been declared.
  • apod.

XSD

Potíž je v tom, že Visual Studio se snaží schema XML souboru validovat vůči XSD souborům z celé solution (dle namespace). Pokud máte tedy odpovídající XSD soubor v solution vícekrát, výsledkem jsou výše uvedené kolize.

Update: XML Schemas

Zbyněk Řešetka (děkuji) mě nasměroval na původní správné řešení, o kterém jsem si myslel, že ve VS2015 zmizelo – dialog XML Schemas, kde si aktivní schema navolíte, i když máte XSD soubor v solution vícekrát:

 

Schemas.png

Přístupný je přes menu XML / Schemas… Záludnost, která mě zmátla, spočívá v tom, že toto menu existuje pouze pokud je otevřen XML soubor a nastavení schemat se nedá vyloudit ani přes Quick Launch.

[ASP].NET Worst Practices – záznam, slides a dema [MS Fest Praha 11/2015]

Slides a dema z mé přednášky pro konferenci MS Fest Praha z 29.11.2015:

Záznam z přednášky je publikován na našem HAVIT YouTube Channel.

Dotčená témata

  • Garbage Collection, Finalizers (C# Destructors), Finalization Queue, Resource Wrapper Pattern
  • <compilation debug=“true|false“ />, <deployment retail=“true“/>
  • ASP.NET Session State
  • ASP.NET Over-posting / Mass-assignment
  • Exceptions
  • Perly z code-review

Advanced Debugging Stories – záznam, slides a dema [MS Fest Praha 11/2015]

Slides a dema z mé přednášky pro konferenci MS Fest Praha z 29.11.2015.

Záznam je publikován na našem HAVIT YouTube Channelu:

Dotčená témata

  • Windows Debugger – SOS.dll
  • DebugDiag – Collection, Analysis
  • StackOverflowException
  • Stack analysis
  • instalace a zprovoznění WinDbg
  • získání memory-dumpu
  • Heap analysis
  • Finalize Queue, F-reachable Queue
  • Garbage Collector
  • rootování, GCRoot
  • statické fieldy

SQL Worst Practices & Optimalizace – slides a dema [WUG Hradec Králové 11/2015]

Slides a dema z mé přednášky pro Windows User Group Hradec Králové z 12.11.2015.

Záznam je publikován na našem HAVIT YouTube Channelu.

Dotčená témata:

  • Pyramida zacílení optimalizačních snah
  • Connection Pooling
  • SQL Injection
  • DB Schema
  • Import vs. hromadné Enable/Disable Constraints
  • [Non-]Clustered Index, Heap
  • Execution Plans
    • Query Cost, Statistiky
    • Operace v execution planu
  • Set-based vs. Row-based logika
  • Různé zápisy stejného dotazu
  • Cachování execution planu
  • Práce s časem a datam vs. rychlost