
En nuestras aplicaciones, es relativamente frecuente tener que buscar una serie de valores dentro de un conjunto de datos. Existen muchos escenarios, como cuando tenemos que buscar una serie de palabras dentro de un texto largo, o comprobar si todos los caracteres de un string
pertenecen a un conjunto de caracteres válidos.
Por ejemplo, centrándonos en este último caso, imaginad que queremos comprobar si el contenido de una cadena de texto de tamaño arbitrario contiene únicamente una serie de caracteres válidos (por ejemplo, las vocales). La implementación que se nos ocurriría de forma natural sería muy simple: recorrer la cadena de texto de entrada, y, por cada carácter, comprobar si está en el conjunto de caracteres permitidos. ¿Fácil, no?
Sin embargo, como veremos en este post, hay formas mucho más eficientes de hacerlo.
Publicado por José M. Aguilar a las 8:05 a. m.
Etiquetas: .net, .net8, .net9, optimización, rendimiento, trucos

Ya tenemos por aquí la recopilación de enlaces de la semana, en esta ocasión con más de 50 enlaces, aunque especialmente cargadas las secciones de .NET y desarrollo web.
Destacable el artículo de Derek Comartin sobre el principio YAGNI (You Aren't Gonna Need It, "No vas a necesitarlo") en el desarrollo de software, y cómo la tentación de añadir abstracciones o código genérico puede llevarnos a un exceso de complejidad que no aporta valor al proyecto.
También, Ricardo Peres continúa su interesante exploración sobre los puntos de extensibilidad de ASP.NET Core, centrándose en esta ocasión en el framework MVC.
El último dramita en la comunidad .NET lo protagoniza el compilador de TypeScript, que ha sido portado a Go y ha multiplicado por diez su rendimiento. Anders Hejlsberg nos lo cuenta de primera mano en este artículo, y podéis seguir el culebrón en este hilo de GitHub.
Y para finalizar con comentario rápido, sabed que HybridCache ya ha salido de preview. Claudia Regio nos resume las novedades de esta herramienta.
El resto de enlaces, a continuación 🙂
Por si te lo perdiste...
- Blazor Server-Side Rendering en .NET 8
José M. Aguilar - Inline out variables en C# 7
José M. Aguilar
.NET
- Hello HybridCache! Streamlining Cache Management for ASP.NET Core Applications
Claudia Regio - New, Simpler Solution File Format
Nayana Srikanth - System.Linq.Async is part of .NET 10
Steven Giesel - Top 15 Mistakes .NET Developers Make: How to Avoid Common Pitfalls
Anton Martyniuk - Writing a .NET Garbage Collector in C#
Kevin Gosse - Microsoft .NET Code Analysis: When CountAsync() Outperforms AnyAsync() in .NET
David McCarter - Ardalis Specification v9 Released
Steve Smith - Accessing Windows Settings Dialogs from Code via Shell Commands
Rick Strahl - .NET Heisenbug Mystery Theater: How Did an Exception Escape its Catch Block?
Aaron Stannard - .NET Interview Questions and Answers (With Code Examples)
Claudio Bernasconi

Quizás sea el único del mundo que desconocía la existencia de "Tech on the toilet", la iniciativa de Google que lleva casi veinte años llevando información de calidad a los aseos de sus oficinas para que los desarrolladores, mientras hacen sus necesidades, puedan mejorar sus habilidades de desarrollo de software.
Pero como seguro que habrá algún despistado más, me ha parecido interesante compartirlo por aquí, así que vamos allá 🙂

Esta semana llegamos a la entrega número 600 de los enlaces interesantes, ¡quién lo iba a decir cuando publiqué la primera recopilación, allá por abril de 2010! Desde entonces, exceptuando los periodos vacacionales y alguna semana que por motivos personales o profesionales no haya podido ser, cada día dedico un buen rato a revisar mis fuentes y seleccionar los contenidos que me parecen más interesantes para compartirlos con vosotros. Luego, normalmente los domingos, me siento a escribir la entrada, añadiendo una pequeña introducción y organizando los enlaces por categorías para facilitar su consulta.
Por cuantificarlo de alguna forma, cada recopilación suele tener entre 60 y 70 links, así que he compartido como mínimo 36.000 enlaces a contenidos que he considerado valiosos, y, haciendo cuentas rápidas, he debido dedicar más de 3.000 horas (unos 375 días a jornada completa) a revisarlos y seleccionarlos. Si tenéis curiosidad por cómo lo hago, los criterios de selección de contenidos, cómo los ordeno, cuáles son mis fuentes, qué herramientas uso, etc., lo podéis leer en este post de hace unos años 👉 https://www.variablenotfound.com/2020/04/diez-anos-de-enlaces-interesantes-lo.html
Pero bueno, creo que el esfuerzo está justificado. En primer lugar, porque me gusta estar al día, y creo que en nuestra profesión es totalmente necesario. Y luego, porque ya que de todas formas estoy dedicando tiempo a ello, ¿por qué no compartirlo con vosotros? Y si a alguien le resulta útil, o le ahorra tiempo, o le descubre algo nuevo, pues ya me doy por satisfecho 🙂
¡Muchas gracias a todos por estar ahí!
Y dicho esto, vamos con la recopilación semanal, de nuevo más de sesenta enlaces, en esta ocasión con mucha presencia de contenidos sobre inteligencia artificial, novedades en herramientas, .NET, MAUI, Azure y Web.
En esta cosecha, muy interesante, y de agradecer, el esfuerzo de José Manuel Alarcón por traducir a un idioma que podamos entender los mortales lo que es Majorana 1 y cómo promete revolucionar el mundo en los próximos años.
También me ha alegrado volver a leer a Marc Rubiño, comentando esta vez el papel de los CTO en las startups, los desafíos a los que se enfrentan y buenas prácticas para lograr el éxito en ese rol.
Juan Irigoyen da un buen repaso a los niveles de aislamiento de transacciones en SQL Server, un tema que siempre es interesante y que conviene tener claro, especialmente en aplicaciones con alta concurrencia.
Y por último, interesante también el post de Sahil Malik donde muestra cómo generar imágenes con IA usando modelos locales.
El resto de enlaces, a continuación.
Por si te lo perdiste...
- 8 formas de usar tuplas en C#
José M. Aguilar - Tip: desinstalar rápidamente paquetes NuGet en proyectos .NET Core
José M. Aguilar
.NET
- .NET 10: Game-Changer or Just Another Version?
DeeDee Walsh - Abusing await with a result type to achieve rust-like error propagation in C# -
Arkleseizure - Creating an analyzer to detect infinite loops caused by ThreadAbortExceptions
Andrew Lock - How to Perform Dynamic Code Execution in .NET with C# Eval Expression
Anton Martyniuk - Generic C# Methods with Enum Constraints for .NET
Khalid Abuhakmeh - Using legacy text encodings in .NET Core
Bart Wullems - Capture .NET Profiler Trace on the Azure App Service platform
Csharpguitar - Disable NuGet Central Package Management for specific projects
Bart Wullems - Co/Contravariance in C# Interfaces
Ian Griffiths - C# - Set environment in unit tests
Bart Wullems

Normalmente los servicios usados por nuestra aplicación ASP.NET Core los registraremos en el contenedor de dependencias, para luego ir satisfaciendo los requisitos de los distintos componentes gracias a los mecanismos de inyección de dependencias que nos proporciona el framework. De estos servicios, aquellos que se registran como scoped se liberarán automáticamente al finalizar el proceso de la petición.
Sin embargo, si instanciamos manualmente un servicio durante el proceso de la petición, tendremos que encargarnos nosotros mismos de liberarlo cuando ya no sea necesario. Los que tengan un ámbito de vida corto, normalmente los crearemos y destruiremos utilizando using
en algunos de sus sabores (como bloque o con ámbito local implícito), pero cuando queremos que pueda ser compartido entre varios componentes, no es sería tan sencillo... si no fuera porque el framework ya lo ha tenido en cuenta 🙂
Para estos casos, ASP.NET Core proporciona el extensor RegisterForDispose()
, que nos permite registrar un servicio para que se libere automáticamente al finalizar la petición.

Aquí van los enlaces recopilados en la última semana de febrero, una buena colección que espero que os resulte de utilidad.
En esta ocasión, además de contenidos interesantes sobre C#, ASP.NET, Visual Studio, JavaScript, CSS, IA y otros temas, creo que la cosa ha ido de previews:
- La presentación de .NET 10 Preview 1
- La salida de preview del formato simplificado para soluciones .NET, ".SLNX"
- La presentación de GitHub Copilot agent mode (preview)
- La presentación de la preview de GPT-4.5
También me ha parecido muy completo el artículo de Joseph Thacker sobre cómo hackear aplicaciones y agentes basados en Modelos de Lenguaje.
Por último, en el capítulo de despedidas de clásicos, vamos a empezar a decirle adiós a Skype, una herramienta que, aunque en agónico declive desde hace ya tiempo, sin duda marcó una época.
El resto de contenidos, a continuación 🙂
Por si te lo perdiste...
- Formatear cadenas interpoladas en C#
José M. Aguilar - Funciones locales en C# 7
José M. Aguilar
.NET
- .NET 10 Preview 1 is now available!
.NET Team - SLNX Finally here
Mattias Karlsson - Building a Better MediatR Publisher With Channels (and why you shouldn't)
Milan Jovanović - C# 14: Null-conditional assignment
Steven Giesel - Disabling localized satellite assemblies during dotnet publish
Andrew Lock - How To Implement Caching Strategies in .NET
Anton Martyniuk - Using PostHog in your .NET applications
Phil Haack - Fixing out of sequence timestamps
Colin Mackay - How to Parse and Extract HL7 Data in C# .NET
Greg Lutz - Doing Some Cleanup in a BackgroundService
Bryan Hogan - Measure Application Performance in .NET Using IMeterFactory
Muhammed Saleem - Microsoft .NET Code Analysis: Optimizing JSON Serialization with Cached Options
David McCarter - C# 14 - New Features and Updates
Vijay Kumari - Measuring the Performance of JSON Alternatives in .NET
Ricardo Peres