En la anterior entrada, la cual fue más bien un pequeño tipo hablamos de como funcionaba internamente la cache de consultas de ADO.NET Entity Framework, pues bien, en esta entrada vamos a ver como podemos configurar un poco los valores sobre los que esta cache trabaja. Esta opción solamente estará disponible desde EF 6.1.1 o EF 6.1.2, de la cual ya tenemos versiones preliminares, gracias a este pull request que he terminado de hacer hace unos pocos días. En realidad, este pequeño PR lo único que hace es habilitar en la ya conocida configuración de ADO.NET Entity Framework la posiblidad de configurar los parámetros de máximo tamaño de cache y tiempo de paso para la expiración de objetos. Lo siguiente podría ser un ejemplo de configuración:
1 2 3 4 5 |
<?xml version=<span class="str">"1.0"</span> encoding=<span class="str">"utf-8"</span>?> <configuration> <configSections> <!-- For more information on Entity Framework configuration, visit http:<span class="rem">//go.microsoft.com/fwlink/?LinkID=237468 --></span> <section name=<span class="str">"entityFramework"</span> type=<span class="str">"System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, </span> |
1 |
<span class="str">Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"</span>requirePermission=<span class="str">"false"</span> /> |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
</configSections> <startup> <supportedRuntime version=<span class="str">"v4.0"</span> sku=<span class="str">".NETFramework,Version=v4.5.1"</span> /> </startup> <entityFramework> <defaultConnectionFactory type=<span class="str">"System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"</span>> <parameters> <parameter <span class="kwrd">value</span>=<span class="str">"v11.0"</span> /> </parameters> </defaultConnectionFactory> <providers> <provider invariantName=<span class="str">"System.Data.SqlClient"</span> type=<span class="str">"System.Data.Entity.SqlServer.SqlProviderServices, EntityFramework.SqlServer"</span> /> </providers> <queryCache size=<span class="str">'1000'</span> cleaningIntervalInSeconds=<span class="str">'60'</span>/> </entityFramework> </configuration> |
Si nos fijamos, el nuevo elemento de configuración, queryCache, nos permite establecer el tamaño máximo de entradas en cache, size,que por defecto es 1000, y que no sería recomendable tocar excepto por aquellas soluciones grandes, donde de verdad el número de entradas potenciales sea lo suficientemente alto como para que el incremento merezca la pena. Recuerde aquí que EF incluye dentro de esta cache los planes no solo de las operaciones de consulta sino también operaciones como inserciones, borrado y actualizaciones. El segundo de los parámetros, cleaningIntervalInSeconds, nos permite, por su lado especificar el tiempo de pasada para la revisión del estatus de entradas, valor especificado en segundos.
Espero que esta entrada aunque pequeñita le sirva para conocer un poco más por dentro como funciona ADO.NET EF
Saludos
Unai