Start Debugging

Tag: comparison

72 posts · Página1de8

Loop com ref T vs indexação de Span<T> em C#: por que a versão com span é tão rápida quanto ou mais rápida no .NET 10
No .NET 10, um for simples sobre span[i] limitado por span.Length compila para um loop sem verificação de limites, com redução de força e contagem regressiva. Um loop escrito à mão com Unsafe.Add(ref r, i) e índice int mantém uma extensão de sinal e uma comparação de contagem progressiva, e foi medido 2-5% mais lento. Benchmarks e disassembly do JIT para arm64 e x64 no .NET 10.0.10.
shared_preferences vs um arquivo JSON com path_provider para salvar configurações no Flutter
Use shared_preferences (SharedPreferencesWithCache) para um punhado de flags simples e um arquivo JSON em getApplicationSupportDirectory para um objeto de configurações estruturado. Cobre o padrão de escrita atômica, a condição de corrida dos salvamentos concorrentes, a armadilha da pasta Documentos no Windows e no Linux, o suporte à web e custos de escrita medidos no Flutter 3.44.8.
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.
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.
Próximo