Start Debugging

csharp

344 posts · Página2de35

Lazy<T> vs LazyInitializer.EnsureInitialized vs double-checked locking em C#

Use Lazy<T> por padrão: ele executa a factory uma única vez, armazena exceções em cache e suas leituras são baratas demais para medir após a inicialização. Use LazyInitializer.EnsureInitialized quando você preenche de forma preguiçosa muitos campos ou posições de um array e não pode pagar um objeto extra por valor. Double-checked locking escrito à mão quase nunca compensa no .NET 10.

O que uma expressão `with` do C# realmente copia, e por que as propriedades calculadas de um record não são recalculadas?

Uma expressão with chama o método <Clone>$ gerado pelo compilador para o record, que executa um construtor de cópia que copia todos os campos de instância e ignora todos os inicializadores. É por isso que propriedades inicializadas a partir de outras propriedades, valores em cache e IDs Guid ficam desatualizados. Medido no .NET 10 com C# 14, com as correções que realmente funcionam.

FileSystemWatcher vs polling para detectar mudanças em arquivos em um compartilhamento de rede no .NET

Em um compartilhamento SMB ou NFS, o polling é a fonte da verdade e o FileSystemWatcher é, no máximo, uma dica. O FileSystemWatcher perde mudanças remotas no Linux e no macOS, estoura o buffer de 64 KB de rede e para de vez quando a conexão cai. Use um diff periódico de snapshots e deixe o watcher apenas disparar uma varredura antecipada. Verificado no .NET 10.0.10.
Anterior Próximo