Estoy buscando la forma más eficaz de organizar el uso de la caché de datos y la fábrica de caché de datos para las llamadas de caché de AppFabric, para obtener entre 400 y 700 caché por carga de página (y apenas cualquier puts) . Parece que usar una única DataCacheFactory estática (o posiblemente una pareja en una configuración round-robin) es el camino a seguir.Caché de AppFabric: uso adecuado de DataCacheFactory y DataCache
¿Llamo a GetCache ("cacheName") para cada solicitud de objeto DataCache, o hago una estática en el momento en que se inicia la fábrica de DataCache y la utilizo para todas las llamadas?
¿Tengo que manejar excepciones, verificar los códigos de error e intentar reintentos?
¿Tengo que considerar contención cuando más de un subproceso intenta usar el almacén de memoria caché y quiere el mismo elemento (por clave)?
¿Existe algún tipo de documentación que explora adecuadamente el diseño y el uso de esto?
Parte de la información que he reunido hasta el momento a partir del foro:
http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/98d4f00d-3a1b-4d7c-88ba-384d3d5da915
"Creación de la fábrica consiste en conectar al clúster y puede tomar algún tiempo, pero una vez que usted. tener el objeto de fábrica y la memoria caché con la que desea trabajar, simplemente puede reutilizar esos objetos para hacer puestas y acceder al caché, y debería ver un rendimiento mucho más rápido ".
http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/0c1d7ce2-4c1b-4c63-b525-5d8f98bb8a49
"Creación DataCacheFactory sola (Singleton) es más rendimiento que la creación de múltiples DataCacheFactory. No debe crear DataCacheFactory para cada llamada, tendrá impacto en el rendimiento."
"Intente encapsular el algoritmo round-robin (teniendo 3/4/5 instancias de fábrica) en su singleton y compare los resultados de la prueba de carga".
http://blogs.msdn.com/b/velocity/archive/2009/04/15/pushing-client-performance.aspx
"se puede aumentar el número de clientes para aumentar el rendimiento de la memoria caché. Pero a veces, si usted quiere tener conjunto más pequeño de clientes y aumentar el rendimiento, un truco es utilizar varias instancias DataCacheFactory. La instancia DataCacheFactory crea una conexión a los servidores (por ejemplo, si hay 3 servidores, creará 3 conexiones) y multiplexa todas las solicitudes de las cadenas de datos en estas conexiones. Por lo tanto, si el volumen de envío/recepción es muy alto, estas conexiones TCP podrían Por lo tanto, una forma es crear múltiples instancias de DataCacheFactory y luego usar las operaciones en ellas ".
Aquí lo que está en uso hasta ahora ... se llama a la propiedad y si el valor de retorno no es nulo se realiza una operación.
private static DataCache Cache
{
get
{
if (_cacheFactory == null)
{
lock (Sync)
{
if (_cacheFactory == null)
{
try
{
_cacheFactory = new DataCacheFactory();
}
catch (DataCacheException ex)
{
if (_logger != null)
{
_logger.LogError(ex.Message, ex);
}
}
}
}
}
DataCache cache = null;
if (_cacheFactory != null)
{
cache = _cacheFactory.GetCache(_cacheName);
}
return cache;
}
}
Ver esta pregunta en el foro de Microsoft AppFabric: http://social.msdn.microsoft.com/Forums/en-AU/velocity/thread/e0a0c6fb-df4e-499f-a023-ba16afb6614f
Hay una respuesta a esta ahora en el foro. Verifique el enlace de arriba. – CRice