{"id":1261,"date":"2026-03-12T08:57:53","date_gmt":"2026-03-12T11:57:53","guid":{"rendered":"https:\/\/maurobernal.com.ar\/blog\/?p=1261"},"modified":"2026-03-12T08:57:53","modified_gmt":"2026-03-12T11:57:53","slug":"dotnet10-rendimiento-stack-allocation-native-aot-gc","status":"publish","type":"post","link":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/","title":{"rendered":"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos"},"content":{"rendered":"\n<p class=\"intro-destacado\">El rendimiento de .NET siempre fue bueno. Pero en los \u00faltimos dos a\u00f1os, con .NET 9 y .NET 10, el equipo fue m\u00e1s all\u00e1: Stack allocation inteligente para objetos peque\u00f1os, Native AOT que genera binarios sin runtime, y un GC que hace menos trabajo porque el runtime hace m\u00e1s con menos memoria. En APIs que proceso millones de requests por d\u00eda, estos cambios se notan.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Stack vs Heap: la distinci\u00f3n que importa para el rendimiento<\/h2>\n\n\n\n<p>El Garbage Collector de .NET es excelente, pero tiene un costo: cada objeto en el heap eventual\u00admente debe ser recolectado. La forma m\u00e1s eficiente de evitar ese costo es no poner cosas en el heap en primer lugar. .NET 10 hace esto autom\u00e1ticamente en m\u00e1s situaciones.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ .NET 10: el runtime puede asignar arrays peque\u00f1os en el stack autom\u00e1ticamente\n\/\/ cuando el compilador puede probar que no \"escapan\" del scope\n\n\/\/ Caso 1: array de tama\u00f1o conocido en compilaci\u00f3n que no escapa\nvoid ProcesarLote()\n{\n    \/\/ .NET 10 puede convertir esto en stack allocation transparentemente\n    int[] buffer = new int[8];  \/\/ peque\u00f1o, scope limitado\n    for (int i = 0; i &lt; buffer.Length; i++)\n        buffer[i] = i * 2;\n    \/\/ buffer no escapa a este m\u00e9todo \u2192 candidato a stack allocation\n}\n\n\/\/ Caso 2: stackalloc expl\u00edcito para control total\nvoid ProcesarDatos(ReadOnlySpan&lt;byte&gt; datos)\n{\n    \/\/ Siempre en el stack, sin GC pressure\n    Span&lt;byte&gt; buffer = stackalloc byte[256];\n    datos.CopyTo(buffer);\n    \/\/ Procesamiento...\n}\n\n\/\/ Caso 3: ArrayPool para buffers grandes que S\u00cd van al heap\n\/\/ (cuando stackalloc no alcanza)\nvar pool = ArrayPool&lt;byte&gt;.Shared;\nbyte[] rentado = pool.Rent(4096);\ntry\n{\n    \/\/ usar rentado...\n}\nfinally\n{\n    pool.Return(rentado);  \/\/ devolver al pool en lugar de GC\n}<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Native AOT: binarios sin runtime instalado<\/h2>\n\n\n\n<p>Native AOT (Ahead-Of-Time compilation) compila tu aplicaci\u00f3n .NET a c\u00f3digo nativo \u2014 un ejecutable que no requiere el runtime de .NET instalado. En .NET 10, el soporte mejor\u00f3 significativamente: m\u00e1s APIs compatibles, binarios m\u00e1s peque\u00f1os y arranque m\u00e1s r\u00e1pido.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\"># Publicar con Native AOT\n# En el .csproj:\n&lt;PropertyGroup&gt;\n  &lt;PublishAot&gt;true&lt;\/PublishAot&gt;\n  &lt;AllowUnsafeBlocks&gt;true&lt;\/AllowUnsafeBlocks&gt;\n&lt;\/PropertyGroup&gt;\n\n# Publicar para Linux x64\ndotnet publish -r linux-x64 -c Release\n\n# Resultado t\u00edpico en .NET 10:\n# Tama\u00f1o del binario: ~8-12 MB (vs ~200 MB con runtime incluido)\n# Tiempo de arranque: ~5ms (vs ~100-300ms con JIT)\n# Memoria RSS inicial: ~15 MB (vs ~50 MB con JIT)<\/code><\/pre>\n\n\n\n<p>Las limitaciones de Native AOT siguen existiendo \u2014 no soporta reflection din\u00e1mica, ciertas operaciones de serializaci\u00f3n requieren source generators \u2014 pero en .NET 10 el porcentaje de c\u00f3digo compatible aument\u00f3 considerablemente. Mis Minimal APIs y Workers services migran sin problemas.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mejoras del GC en .NET 10<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code\">\/\/ Configurar el GC para workloads espec\u00edficos\n\/\/ En appsettings.json o como variables de entorno:\n\n\/\/ Para APIs de alta frecuencia (latencia baja):\n\/\/ DOTNET_GCConserveMemory=0 (default \u2014 m\u00e1s GC, menos memoria)\n\n\/\/ Para servicios de larga duraci\u00f3n (memoria controlada):\n\/\/ DOTNET_GCConserveMemory=9 (agresivo en liberar memoria)\n\n\/\/ Programmaticamente:\nGCSettings.LatencyMode = GCLatencyMode.SustainedLowLatency; \/\/ Para APIs\n\n\/\/ .NET 10: Dynamic Heap Regions\n\/\/ El GC puede ajustar el tama\u00f1o de las regiones del heap en tiempo de ejecuci\u00f3n\n\/\/ seg\u00fan los patrones de uso observados \u2014 sin configuraci\u00f3n manual<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Tensor Primitives: operaciones SIMD de alto nivel<\/h2>\n\n\n\n<p>Introducido en .NET 9 y expandido en .NET 10, <code>System.Numerics.TensorPrimitives<\/code> expone operaciones vectorizadas (SIMD) con una API de alto nivel. \u00datil para procesamiento de se\u00f1ales, ML, operaciones financieras en bulk.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code\">using System.Numerics.Tensors;\n\nfloat[] precios = [100f, 200f, 150f, 300f, 250f];\nfloat[] descuentos = [0.1f, 0.2f, 0.15f, 0.05f, 0.25f];\nfloat[] preciosFinales = new float[precios.Length];\n\n\/\/ Multiplicaci\u00f3n vectorizada \u2014 usa SIMD autom\u00e1ticamente\nTensorPrimitives.Multiply(precios, descuentos, preciosFinales);\n\n\/\/ Suma de todos los elementos \u2014 tambi\u00e9n vectorizada\nfloat sumaTotal = TensorPrimitives.Sum(precios);\n\n\/\/ Operaciones estad\u00edsticas\nfloat maximo = TensorPrimitives.Max(precios);\nfloat minimo = TensorPrimitives.Min(precios);<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">N\u00fameros reales de mis APIs<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>M\u00e9trica<\/th><th>.NET 8<\/th><th>.NET 10<\/th><th>Mejora<\/th><\/tr><\/thead><tbody>\n<tr><td>Memoria RSS (pod idle)<\/td><td>~85 MB<\/td><td>~65 MB<\/td><td>~24% menos<\/td><\/tr>\n<tr><td>P99 latencia (API simple)<\/td><td>~12 ms<\/td><td>~9 ms<\/td><td>~25% menos<\/td><\/tr>\n<tr><td>Throughput (req\/s)<\/td><td>~45.000<\/td><td>~58.000<\/td><td>~29% m\u00e1s<\/td><\/tr>\n<tr><td>Tiempo arranque cold<\/td><td>~280 ms<\/td><td>~200 ms<\/td><td>~28% menos<\/td><\/tr>\n<\/tbody><\/table><\/figure>\n\n\n\n<p>Estos n\u00fameros son de una API de gesti\u00f3n interna con carga moderada. En workloads m\u00e1s intensivos los delta son mayores. En workloads livianos, menores. Pero la direcci\u00f3n es siempre la misma: .NET 10 hace m\u00e1s con menos.<\/p>\n\n<hr class=\"wp-block-separator\"\/>\n<p><em><a href=\"https:\/\/maurobernal.com.ar\/blog\/?p=1260\">\u2190 LINQ en .NET 9 y .NET 10: CountBy, AggregateBy, Index() y las mejoras que cambian c\u00f3mo consult\u00e1s datos<\/a> | <strong>Serie .NET 8 \u2192 .NET 10<\/strong> | Pr\u00f3ximo: <a href=\"https:\/\/maurobernal.com.ar\/blog\/?p=1262\">dotnet run script.cs y las nuevas herramientas de .NET 10: OpenAPI, HttpClient y m\u00e1s \u2192<\/a><\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>Rendimiento en .NET 10: stack allocation inteligente, Native AOT con binarios de 8MB, mejoras del GC y Tensor Primitives para operaciones SIMD. Con n\u00fameros reales de APIs en producci\u00f3n.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[202],"tags":[304,18,294,305,312,65,311],"class_list":["post-1261","post","type-post","status-publish","format-standard","hentry","category-dotnet","tag-aot","tag-dotnet","tag-dotnet10","tag-gc","tag-memory","tag-performance","tag-span"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos &#183; devops Mauro Bernal<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/\" \/>\n<meta property=\"og:locale\" content=\"es_ES\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos &#183; devops Mauro Bernal\" \/>\n<meta property=\"og:description\" content=\"Rendimiento en .NET 10: stack allocation inteligente, Native AOT con binarios de 8MB, mejoras del GC y Tensor Primitives para operaciones SIMD. Con n\u00fameros reales de APIs en producci\u00f3n.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/\" \/>\n<meta property=\"og:site_name\" content=\"devops Mauro Bernal\" \/>\n<meta property=\"article:published_time\" content=\"2026-03-12T11:57:53+00:00\" \/>\n<meta name=\"author\" content=\"Mauro Bernal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:site\" content=\"@_maurobernal\" \/>\n<meta name=\"twitter:label1\" content=\"Escrito por\" \/>\n\t<meta name=\"twitter:data1\" content=\"Mauro Bernal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tiempo de lectura\" \/>\n\t<meta name=\"twitter:data2\" content=\"1 minuto\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/\"},\"author\":{\"name\":\"Mauro Bernal\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"headline\":\"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos\",\"datePublished\":\"2026-03-12T11:57:53+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/\"},\"wordCount\":387,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"keywords\":[\"aot\",\"dotnet\",\"dotnet10\",\"gc\",\"memory\",\"performance\",\"span\"],\"articleSection\":[\"DotNet\"],\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/\",\"name\":\"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos &#183; devops Mauro Bernal\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\"},\"datePublished\":\"2026-03-12T11:57:53+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/#breadcrumb\"},\"inLanguage\":\"es\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/dotnet10-rendimiento-stack-allocation-native-aot-gc\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Portada\",\"item\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#website\",\"url\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/\",\"name\":\"devops Mauro Bernal\",\"description\":\"Cuando tu trabajo es hacer que las cosas funcionen bien...\",\"publisher\":{\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"es\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\\\/\\\/maurobernal.com.ar\\\/blog\\\/#\\\/schema\\\/person\\\/09c4dbdfb59b20e015c703fd19713283\",\"name\":\"Mauro Bernal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"es\",\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\",\"width\":1740,\"height\":1740,\"caption\":\"Mauro Bernal\"},\"logo\":{\"@id\":\"https:\\\/\\\/i0.wp.com\\\/maurobernal.com.ar\\\/blog\\\/wp-content\\\/uploads\\\/2023\\\/07\\\/logo-maurobernal.png?fit=1740%2C1740&ssl=1\"},\"description\":\"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman\",\"sameAs\":[\"https:\\\/\\\/maurobernal.com.ar\",\"https:\\\/\\\/x.com\\\/_maurobernal\",\"https:\\\/\\\/youtube.com\\\/maurobernal\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos &#183; devops Mauro Bernal","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/","og_locale":"es_ES","og_type":"article","og_title":"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos &#183; devops Mauro Bernal","og_description":"Rendimiento en .NET 10: stack allocation inteligente, Native AOT con binarios de 8MB, mejoras del GC y Tensor Primitives para operaciones SIMD. Con n\u00fameros reales de APIs en producci\u00f3n.","og_url":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/","og_site_name":"devops Mauro Bernal","article_published_time":"2026-03-12T11:57:53+00:00","author":"Mauro Bernal","twitter_card":"summary_large_image","twitter_creator":"@_maurobernal","twitter_site":"@_maurobernal","twitter_misc":{"Escrito por":"Mauro Bernal","Tiempo de lectura":"1 minuto"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/#article","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/"},"author":{"name":"Mauro Bernal","@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"headline":"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos","datePublished":"2026-03-12T11:57:53+00:00","mainEntityOfPage":{"@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/"},"wordCount":387,"commentCount":0,"publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"keywords":["aot","dotnet","dotnet10","gc","memory","performance","span"],"articleSection":["DotNet"],"inLanguage":"es","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/","url":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/","name":"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos &#183; devops Mauro Bernal","isPartOf":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#website"},"datePublished":"2026-03-12T11:57:53+00:00","breadcrumb":{"@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/#breadcrumb"},"inLanguage":"es","potentialAction":[{"@type":"ReadAction","target":["https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/maurobernal.com.ar\/blog\/dotnet10-rendimiento-stack-allocation-native-aot-gc\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Portada","item":"https:\/\/maurobernal.com.ar\/blog\/"},{"@type":"ListItem","position":2,"name":"Rendimiento extremo en .NET 10: Stack allocation, Native AOT y el GC que trabaja menos"}]},{"@type":"WebSite","@id":"https:\/\/maurobernal.com.ar\/blog\/#website","url":"https:\/\/maurobernal.com.ar\/blog\/","name":"devops Mauro Bernal","description":"Cuando tu trabajo es hacer que las cosas funcionen bien...","publisher":{"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/maurobernal.com.ar\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"es"},{"@type":["Person","Organization"],"@id":"https:\/\/maurobernal.com.ar\/blog\/#\/schema\/person\/09c4dbdfb59b20e015c703fd19713283","name":"Mauro Bernal","image":{"@type":"ImageObject","inLanguage":"es","@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","url":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","contentUrl":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1","width":1740,"height":1740,"caption":"Mauro Bernal"},"logo":{"@id":"https:\/\/i0.wp.com\/maurobernal.com.ar\/blog\/wp-content\/uploads\/2023\/07\/logo-maurobernal.png?fit=1740%2C1740&ssl=1"},"description":"Desarrollo de Sistemas en .Net, IT Callcenters, DBA de SQL Server, Mikrotik, Pentest y T\u00e9cnico consultor de Sistemas Bejerman","sameAs":["https:\/\/maurobernal.com.ar","https:\/\/x.com\/_maurobernal","https:\/\/youtube.com\/maurobernal"]}]}},"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack-related-posts":[],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1261","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/comments?post=1261"}],"version-history":[{"count":1,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1261\/revisions"}],"predecessor-version":[{"id":1270,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/posts\/1261\/revisions\/1270"}],"wp:attachment":[{"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/media?parent=1261"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/categories?post=1261"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/maurobernal.com.ar\/blog\/wp-json\/wp\/v2\/tags?post=1261"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}