5

Hola tengo una pregunta acerca de mi rendimiento del servidor ... me dieron un clásico cms de alojamiento asp ~ 250 sitios web, para cada sitio web que construyen un diccionario clásico ASP utilizandoDiccionario/Cliente VS variables de aplicación

set dict = CreateObject("Scripting.Dictionary") 
dict.add "test1","Value Test1" 
dict.add "test2","Value Test2" 
dict.add "test3","Value Test3" 

que diccionario se carga en cada página para cada usuario ...

digamos que tenemos unos 150 ~ 000 usuarios que visitan los sitios web de carga mensual de los diccionarios de alrededor de 100 k ~ cada de cada carga ...

debo usar variable de aplicación como diccionario en lugar de lo ¿Está usando mi diccionario todo el tiempo?

y realmente mejorará el rendimiento de mi servidor?

+0

"~ 100K" cantidad de elementos o el tamaño total de la memoria necesaria. Si la última cantidad de artículos? ¿Los valores son siempre cadenas o también existen tipos complejos? – AnthonyWJones

+0

¿Este es un diccionario común utilizado por todos los usuarios del sitio o el diccionario varía de un usuario a otro? – AnthonyWJones

+0

mismo diccionario para todos los usuarios/sitios –

Respuesta

2

Ciertamente, cargar un diccionario para cada solicitud de ASP definitivamente es una mala idea y no solo dañará su rendimiento sino también fragmentará su memoria virtual.

El uso de una matriz en su lugar todavía tiene el mismo problema, cada solicitud necesitaría asignar toda la memoria necesaria para mantenerla y aún necesita rellenar cada solicitud.

La respuesta simple sería sí, utilice el objeto de la aplicación como el diccionario. Esto le costará mucho menos en memoria y CPU. La desventaja es ¿colisiona con el uso de objetos de aplicaciones existentes? Es posible que necesite agregar un prefijo a sus claves para evitar este problema.

+0

yup lo hice pruébalo en la aplicación usando un prefijo mi diccionario fue construido en francés o inglés en este momento, entonces lo que hice fue eliminar el prefic "Dict -" & Language & "- MyKey" como mi clave de aplicación thx para tu ayuda –

1

Sugiero cargar el diccionario solo una vez, ya que el objeto Diccionario es pesado en términos de memoria, lento en términos de búsqueda y el grande: no siempre se destruye en la memoria cuando crees que debería ser. Por lo tanto, incluso después de que un usuario haya salido de la página, este objeto aún puede permanecer en la memoria esperando a ser eliminado (incluso si lo "destruye" explícitamente). Ahora multiplique ese número de visitas de página por visita por usuario ...

Un método alternativo y más ligero de memoria sería usar una matriz: unidimensional si puede mantener el seguimiento del índice en algún lugar (mejor) , o bidimensional con una función de búsqueda si es necesario (sin duda, si otros mantienen el código ahora o en el futuro).

+0

buen punto desafortunadamente creo que una matriz sería más lenta para recoger información cuando crezca, ya que el diccionario está indexado, de todos modos, intentaré cargarlo una vez en la variable de aplicación y ver qué sucede THX para su tiempo –

+0

"no siempre se destruye en la memoria cuando usted piensa que debería ser" ¿de dónde obtuvo esta información? – AnthonyWJones

+0

LM: la matriz sería más rápida ya que la llamaría directamente usando el índice (de 0 a n) en lugar de tener que hacer una búsqueda en la clave como lo hace con un objeto de diccionario (asumiendo que es por eso que tiene la "prueba1/2/3 "claves. Como nota adicional: recuerde que su servidor (máquina o IIS) se puede reiniciar en cualquier momento y cuando lo haga, la aplicación vars ya no existirá, así que asegúrese de que su mecanismo compruebe primero el objeto y si no está allí, luego lo crea y lo repobla automáticamente. –

1

Estoy bastante seguro de que crear instancias de scripting.dictionary en cada página no debería ser un problema en ningún sitio web. Si el rendimiento es un problema, le sugiero que haga un perfil de su página primero para ver dónde está el problema. Existe una gran posibilidad de que haya una consulta no optimizada en algún lugar que requiera más de 100 ms para finalizar.

Ejecutamos un sitio ASP clásico que maneja 200k páginas vistas al día y utiliza scriping.dictionary extensivamente en cada página (más de 25 instancias). Lo usamos como base para todo tipo de cosas. ¿Tiene alguna secuencia de comandos de ejemplo para mostrar que los dict no siempre son destruidos por garbagecollector? ¿O que sus búsquedas son lentas en comparación con cualquier alternativa? El único inconveniente que encontramos es la falta de un método de "clonación".

+0

el problema no era el rendimiento en sí, sino que siempre busco mejorar mi código y dar un salto al servidor. Yo tenía la loca idea de usar la variable de aplicación en lugar de reconstruir mi dctionary en cada vista de página y estaba buscando alguna entrada (si era una buena idea o no) –

+1

Supongo que, como Jeff Atwood ha comentado en su blog antes, estos Los servidores de días son tan potentes (y baratos para agregar más potencia de procesamiento) que la optimización de código ya no es necesaria tanto como cuando aprendí a codificar ... –

+0

podría no ser necesario tanto como dosent significa que no es importante;) –

Cuestiones relacionadas