Tag Archives: Performance

Novinky v .NET Internals – záznam, slides a dema [TechEd Praha 2021]

Záznam z přednášky pro konferenci TechEd DevCon Praha ze 19. května 2021, kde jsem povídal o novinkách v .NET Internals v těchto oblastech:

  • JIT, compilation
  • Diagnostic CLI tools
  • Memory Management, Garbage Collector
  • Performance

Konference probíhala on-line.

Dema: https://github.com/hakenr/DotNetInternalsDemo

Slides

OrderBy(e => e.NullableNavigationProperty.SomeValue) v EF Core

Při code-reviews se opakovaně setkávám se snahou ošetřit null v OrderBy/Where a v podobných LINQ extension metodách při použití EF Core. Například

 .OrderBy(e => e.BossId.HasValue ? e.Boss.LastName : String.Empty)

Je to obvykle nadbytečné, ba dokonce nežádoucí.

LINQ provider výraz nevykonává, ale překládá do SQL, takže pohodlně funguje

.OrderBy(e => e.Boss.LastName)

přestože Boss může být NULL.

Možná takový zápis v C# tahá za oči, ale spíš bych se obával tu expression pro EF Core jakkoliv komplikovat, aby z toho nevznikl nějaký složitější dotaz než je potřeba.

Konkrétně krátká podoba vytvoří SQL klauzuli

ORDER BY [e].[LastName]

a SQL si s NULL pohodlně poradí, zatímco dlouhá podoba udělá

ORDER BY CASE
    WHEN [e].[Id] IS NOT NULL THEN [e].[LastName]
    ELSE N''''
END

…což obvykle nepotřebujete a v T-SQL by vás to nejspíš nikdy nenapadalo takhle řešit.

C# 9.0 Candidates + .NET 5 – záznam, slides a dema [TechEd Praha 2019]

Záznam z přednášky pro konferenci TechEd DevCon Praha ze 5. května 2020. Konference letos probíhala on-line.

[ASP].NET [Core] Performance Tuning – záznam, slides, dema [WUG Days Brno, 14.9.2019]

Záznam z mé přednášky pro konferenci WUG Days Brno ze 14. září 2019, kde jsem ukazoval pár performance tipů z praxe:

  • String Concatenation
  • StringBuilder Capacity Preinitialization
  • Collection Capacity Preinitialization
  • Substring as Span
  • String Concat Consolidation
  • Search In Collection
  • Dictionary Pickup Redundant Checks
  • Dictionary Remove Redundant Checks
  • Collection Empty Check
  • Redundant Casting
  • Boxing Unboxing
  • Caching
  • Finalization
  • Exception Handling (Try Catch)
  • Reflection
  • Reflection – Layout Trick

Slides a dema:

Nahrávka je publikována na našem HAVIT YouTube Channelu.

Azure Blob Storage + CDN [Jiří Kanda, HAVIT Vzdělávací okénko, 9.5.2019]

Záznam ze Vzdělávacího okénka HAVIT z 9. května 2019, kde Jiří Kanda povídal o Azure Blob Storage a Azure CDN (Content Delivery Network).

Span a jeho příbuzní [Martin Havel, HAVIT Vzdělávací okénko, 7.3.2019]

Záznam ze Vzdělávacího okénka HAVIT ze 7. března 2019, kde Martin Havel ukazoval nové způsoby efektivní práce s pamětí v .NET Core.

  • Span<T>
  • Memory<T>
  • ref struct
  • stackalloc
  • Encoding.UTF8 / Utf8Parser
  • MemoryMarshal
  • ArrayPool<T>
  • BenchmarkDotnet

Nahrávka je publikována na našem HAVIT YouTube Channelu.

Optimalizace výkonu [ASP].NET + profiling – záznam, slides a dema [Robert Haken, ShowIT SK 2019]

Záznam z mého vystoupení pro ShowIT Bratislava ze 6. února 2019.

Slides a dema:

Dotčená témata:

  • Premature optimisation
  • <compilation debug=“true“/>
  • Data Structures – List, Sorted Arrray (Binary Search), Dictionary, Hashtable, Lookup
  • String Concatentation vs. StringBuilder (Garbage Collection, Large Object Heap)
  • Visual Studio Diagnostic Tools – CPU Profiling, Memory Usage
  • Profiling – Instrumentation vs. Sampling
  • Visual Studio Performace Profiler
  • ANTS Performance Profiler
  • PerfView
  • Windows Performance Analyzer, Windows Performance Recorder
  • Web Applications Caching
    • Data Caching
    • Output Caching

Nahrávka je publikována na našem HAVIT YouTube Channelu.

SQL: Datum poslední aktualizace statistik indexu

Jednoduchým dotazem se dá zjistit, kdy došlo k poslední aktualizaci statistik indexu (SQL si nepamatuje poslední rebuild indexu, ale tohle je taková odpovídající hodnota):

SELECT
		o.name AS TableName,
		i.name AS IndexName,
		STATS_DATE(i.object_id, i.index_id) AS StatisticsUpdate
	FROM sys.objects o
		INNER JOIN sys.indexes i ON (o.object_id = i.object_id)
	WHERE
		(i.type > 0)
		AND (o.type_desc NOT IN ('INTERNAL_TABLE', 'SYSTEM_TABLE'))
	ORDER BY TableName, IndexName
	-- ORDER BY StatisticsUpdate

Viz též:

Profiling výkonu a paměti [Update Days: Legacy Apps 05/2018]

Dema z mé přednášky pro Update Days: Legacy Apps z 29. května 2018:

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

Prezentované nástroje:

Optimalizace SQL dotazů [Robert Haken, FreshIT, 27.3.2018]

Záznam z přednášky pro konferenci FreshIT Praha z 27.3.2018. Je publikován na našem HAVIT YouTube Channelu.

Materiály

Dotčená témata

  • SQL Optimalizace
  • Zacílení optimalizace
  • Connection Pooling
  • Cachování
  • DB Schema
  • Heap
  • Clustered Index, Non-Clustered Index
  • Execution Plans
  • Statistiky
  • Table Scan, Index Scan, Index Seek, Lookup
  • Merge Join, Hashmatch, Nested Loops
  • Parameter Sniffing
  • Porovnávání dle data

a další…