cuando tu trabajo es ver por qué las aplicaciones no funcionan
Loco, no deberías usar ">" y esas cosas para que aparezcan los símbolos?
Sí, pero traté con varias opciones, pero siempre le daba por interpretarlo como script.
Me sumo a tu idea y además me parece que sería bueno incluso si uno la implementa utilizando el patrón Strategy, se aplica cundo se tiene un conjunto de algoritmos para solucionar un mismo problema de esa forma entonces alguien podría utilizar sin mucho esfuerzo distintas variantes de paginación de hecho podría incluso hasta generar una clase colocada en la UIP que se especialice en la paginación y determine cual criterio aplicar. Esto teniendo en cuenta que Patrick habla de un algoritmo yo menciono otro pero en realidad existen algunos más que recuerde en éste momento he visto uno basado en tablas temporales, otro en RowCount, etc. Cada uno tiene distintos niveles de respuesta y posibilidad de aplicación en dependencia de la solución y la necesidad planteada.
Luisón, me aparecen las siguientes dudas: ¿Es la UIP la encargada de determinar el criterio? ¿Eso implicaría que la UIP debe conocer todos los criterios?. ¿No es responsabilidad de datos tomar esa decisión? De los algoritmos, por supuesto que hay mas. Lo que a mi no me gusta de las tablas temporales es que producen un efecto similar a la segunda metodología ya que hay mucha copia de datos.
Completamene de acuerdo, es super bueno el Ants Profiler. pero lo de bajar el IIS es una lata, por ultimo debería bajarlo el mismo (uno siempre es comodo). Hernan Maldonado
Pero efectivamente lo hace solo... para nuestra comodidad.
Me parece que si es la UIP pero la parte de presentación directamente, la parte de proceso de presentación, en la capa de datos no creo pues no sabe para que se quieren los datos y puede ser un elemento importante a tener en cuenta a la hora de decidir el algoritmo.
Esta excelente este aporte !!!! Muy bien explicado . . .
Muchas gracias.
Muy util.. justo lo que necesitaba. mi enhorabuena por el articulo.
Como caducar una página de asp.net
Subject: RE: Descargar archivo de base de datos
Patrick Me alegra que pierdas tu virginidad en el campo del crackeo, pero lo que más me llama la atención es que existan herramientas con esos niveles de protección un Simple y Asqueroso IF, te imaginas si ese mismo código se genera en tiempo de ejecución, como se puede hacer con .Net, no darías con el por lo menos de esa forma y te costaría un poco y tendrías que usar herramientas un poco más potentes, aunque nadie dice que sea imposible, pero por lo menos no tan simple. Ahora bien esto no es un problema nuevo, los desarrolladores de java ya pasaron por esa etapa solo que nosotros ahora nos estamos adentrando en las interioridades de la nueva plataforma y comenzamos en realidad a estresarla. Te recomiendo para tú tranquilidad pon en el que todo lo sabe “Google” Java+Descompilación y te llevarás una sorpresa. Si analizamos que para muchos la técnica de ofuscamiento consiste en: cambiar en el momento de compilación el nombre de clases, métodos, variables, etc, por cadenas generadas de forma automática, permitiendo que al hacer una descompilación las cosas sean más difíciles y la estructura del programa no sea tan evidente, queda suficientemente claro con tu ejemplo que no porque algo diga que ofusca el código en realidad se toma su trabajo en serio De todas formas patrick te muestro otro ejemplo de cómo hacerlo sin recompilar. Para esto solo necesitas una editor hexadecimal (hex)(Como hace mucho que no hago esto fue lo que más me costó hacer, encontrar uno que me gustar, caprichos de cubano). Como no pones el código IL real donde está la comparación yo lo agrego … ldc.i4.s 100 ble.s L_0027 esto claramente puede cambiar en tú código … Entonces si tenemos en cuenta que ldc.i4.s es en hex 1F y 100 en hex es 64 y además ble.s es 31 entonces puedo abrir con cualquier editor hex y buscar 1F6431 cuando lo encuentre puedo chequear un par de instrucciones anteriores y posteriores para estar seguro de que estoy en la zona correcta y luego hago el siguiente cambio 1F64 que no es más que cargar en memoria 100 ahora lo cambio por 1F00 cargar en memoria cero y además cambio 31 por 30 que es bgt.s. Resultado mostrado por reflector una vez hecho el cambio. … ldc.i4.s 0 bgt.s L_0027 … y entonces tu programa funcionará para cualquier archivo con más de cero líneas. Creo que es suficiente esa cantidad de líneas. Por lo que podemos decir que para el nuevo código aplican algunos trucos antiguos, cosa que no me asusta en lo particular, soy de los convencidos de que si alguien se empeña en hacer daño lo más probable que lo logre si: 1. Sí el código no está bien escrito 2. Herramientas no profesionales de desarrollo 3. Capacidad de procesamiento Infinito 4 Paciencia infinita 5 Tiempo infinito Saludos Luison.Net
What have I done? Patrick gets cracking
De esa forma es mas rapida, pero requiere tener los conocimientos de hexadecimal y editores hexadecimales, además de mucha mas paciencia. En este caso, lo que quería mostrar era que con 0 conocimiento y las herramientas básicas, se puede crackear un programa. Concuerdo totalmente que la validación utilizada es bastante idiota y eso es responsabilidad de los desarrolladores, o al menos de alguien por que si la base de tu empresa con las ventas y la diferencia entre vender y no vender esta en 1 SOLO IF, entonces ahi hay problemas. Saludos.
Amigo, estoy tratando de utilizar el codigo que indicas para impersonar, pero no he podido hacer que ejecute correctamente. estoy utlizando un servidor 2000 server. ¿es necesario realizar alguna configracion en especial? correo: acc20@hotmail.com
Muy buen estudio Patrick. Te felicito por haberte tomado tu tiempo en la investigación. Trataré de repetir el proceso y estudiarlo también. Un abrazo, Jorge
Gracias Jorge. Algo que me llama la atencion es que al ocurrir esto, la programación en la página y en code behind no son compatibles. Es mejor adoptar uno u otro modelo. La mezcla te puede generar problemas no fáciles de resolver. Saludos.
Mirando este y otros foros sobre este asunto, he llegado a la conclusión de que estas cosas no sirven para nada, tanto estas como otras que ha con cookies y tal. La única forma que se me ha ocurrido para hacer esto es que apartir de que entren en tu aplicación ir machacando la entrada anterior del histórico con la actual. podrían venir basicamente de 2 maneras: o haciendo ya un: document.location.replace('mipagina.html , .php, .asp, .loquesea'); con lo cual ya no tendriamos problemas ya que esta función lo hace automatico. O haciendo un href, un submit o cualquier otra forma de llamar a una pagina. de esta otra manera deberíamos machacar la entrada de historico anterior, o sea borrar la entrada del previous. Con esto que conseguiriamos, que cuando dieran al boton atras en cualquiera de sus variantes saliera del ambito de nuestra aplicación ya que solo tenemos escrita una entrada en el histórico. Entiendo que los botones volver de nuestra aplicación no estan hechos ni con document.history.go(-1); ni history.back(); ni guarrerias de este tipo.
Hola Patrick, en relación al artículo Paginación de registros V2.0, se me presenta la duda de como haces cuando un usuario visita más páginas y no tienes las claves cargadas en la cache. Es decir en el artículo hablas de tener 501 claves e ir cargando registros de 50 en 50 a cada petición, pero que ocurre si un usuario solicita la página 11, 12, etc. como actualizas la cache de claves? Escribí un correo a través de la página preguntando lo mismo. Disculpa las molestias. Sergio
Sergio, había visto tu mensaje, pero no habia tenido oportunidad de contestarlo. C/R a tu pregunta, no tengo un respuesta probada funcionando, pero podrías complementarlo con un sistema de bloques de páginas, en donde almacenas en caché los 500 ids de cada bloque de 10 páginas. Si el usuario llega a la página 11 podrías buscar los nuevos 500 ids. Otra forma es obtener solo 250 ids nuevos y descartar los 250 de las primeras 5 paginas, quedandote con 10 paginas, de la 6 a las 15. Esto puede funcionar sin problemas para las primeras páginas, pero a medida que avanzas hacia adelante irremediablemente se pondrá mas lento el obtener estas "super paginas" ya que tendrías que utilizar un algoritmo TSQL del tipo "select where not in (select)", el cual es muy lento. Te puedo preguntar, que necesidad hay de llegar mas allá de 500 registros?. Nosotros no lo hemos necesitado. Por eso quiero conocer tu necesidad. Saludos. Patrick.
Hola Patrick El problema se plantea para cualquier aplicación windows de gestión. El usuario está acostumbrado a tener la típica botonera de Primero, Anterior, Siguiente y Ultimo para navegar por los registros. El volumen máximo de registros para ciertas tablas (pedidos, albaranes, ...) será >50000, clasificadas por empresa, ejercicio, serie... Donde en un momento dado un usuario al entrar a ver un listado puede trabajar con 2000-8000 registros para luego como bien indicas mirar los 40 o 50 primeros registros y salir, pero aun así debo tener la posibilidad de que quiera posicionarse en cualquier registro que se encuentre fuera de los límites de la caché, por ejemplo por que anda buscando alguno en concreto que no está entre los que busca. No se me ocurre ninguna forma eficiente que solucione el problema. Ahora que estoy haciendo pruebas la cache de Ids es del total de registros (3000-8000) y no va mal. Como ventaja al tener en cache todos los Id's siempre puedo cargar la página que contiene el registro que anda buscando sin ningún problema. No obstante no termina de convencerme. Gracias por contestar Sergio
Voy a tomar una frase tuya y mostrarte un camino que a lo mejor no has notado. Tu dices "por ejemplo por que anda buscando alguno en concreto que no está entre los que busca". Por que no entonces le das opciones de filtro, varias opciones para que pueda acotar sus resultados?. Nosotros tenermos entre 6 y 10 filtros por busqueda, entonces, mi defensa es que con ese nivel de filtrado y los 500 registros que retorna, DEBE poder encontrar cualquier cosa. Sinó es así, el usuario no sabe lo que anda buscando y ahi entramos en otro problema. Patrick.
I would like more information about the Capa de Negocios. My name is Claudia and I am from Bolivia . I am a student of system ingeneering . I would like too about of abstract data Help me please. Write me
Hola Patrick Ante la respuesta a mi pregunta no tengo ninguna duda de que tienes razón, muchas veces (por no decir siempre) el usuario no sabe bien lo que anda buscando. Así que lo enfocaré de la forma que me indicas. Gracias. Otra cosa, tengo dudas de cómo debo descargar de memoria un dataset que hayamos cargado (Por ejemplo el primero con 25 registros) al releer otra página de datos (otros 25 registros). Lo comento porque aunque haga lo siguiente: objdataset.clear() objdataset.dispose previamente antes de recargar de nuevo con los siguientes 25 registros el consumo de memoria sube, y a cada nueva página o registro que me desplace sube y sube, nunca baja o se mantiene. Este comportamiento de la memoria es normal o estoy haciendo algo mal. He leido algunos artículos sobre este tema pero al probarlos ninguno hace que la memoria se libere. Entiendo que el GC no actua en el mismo instante en el que el objeto ya ha salido de ámbito, pero aun así me parece excesivo el consumo de memoria. En VB6 cuando cargabas un objeto en memoria y después lo liberabas el consumo bajaba, pero en .NET no da esa sensación. Algún consejo? Gracias de antemano.
Sergio, la utilización de memoria en .net sigue una regla muy simple. Si el equipo tiene memoria disponible todavia, la usa. El framework no libera memoria cuando no es necesario. El garbage collector no limpia inmediatamente los registros marcados a nothing, de hecho, no necesario hacerlos = nothing. Tu debieras ver que la memoria utilizada sube, pero en algun momento dejará de subir y se mantendrá estable. Rara vez verás que baje, a menos que tengas otro proceso corriendo que la necesite. Es una lucha entre las aplicaciones y el sistema operativo. Patrick.
Hola saludos me interesa mucho este tema ya que en este area me he desenvuelto mucho desde chavo le agradeceria al autor de esta informacion me pueda explicar un poco mas sobre como usar las contraseñas hash ya que he saca unas cuantas pero al intentra utilizarlas me es un poco dificil ya que aun no entiendo que es enrealidad los bugs que abren o que bulnerabilidades puedo ver y usar saludos ATTE nando
Saludos Patrick, exceleten Articulo, el asunto que es el Termino "Crackear" se usa para fines ilicitos o incorrecto, existe una herramienta que se llama SALAMANDER.NET, el cual a pesar de el codigo estar Ofuscado lo llega mostrar tanto en Codigo IL, como en Codigo Nativo. en tanto pondre en practica expuesto en tu articulo para ver de Usar Otro Prodcuto aparte del Ofuscator. Saludos Ricardo Hinostroza
Nada que decir... al igual que tu, soy un amigo cercano del .Net Reflector Slds. Javier
Hola. Me llamo Eugenio y llevo unos meses estudiando VB.NET, e traducido el código que ahi pones a VB y me interesa poder desencripatar, para mis aplicaciones. Me podías envíar a mi correo (eecsaky@hotmail.com) el código para desencriptar. Un saludo, eecsaky
Eugenio, la encriptación Hash no es posible de desencriptarla. Si tu buscar un algoritmo que puedas encriptar y desencriptar de forma segura, debes utilizar algoritmos simetricos. Te recomiendo que utilices Rijndael. Fijate en este otro post : http://msmvps.com/pmackay/archive/2004/11/27/21085.aspx Saludos. Patrick.
Hola =) Pues me sirvo bastante esta buscando sobre encriptacion asimetrica y despues de leer esto me quedo claro... Nos vemos Saludos ;)
Muy explicativo, sin embargo quería saber si es posible que tengas un ejemplo en VB Net. Gracias por tu aporte. ulatealejandro@yahoo.com
Patrick: Me gustaría que me enviaras la PPT de la exposición del 6/10. La encontré buena y donde entregaste variados elementos que permiten realmente optimizar. Gracias. Fernando Carvallo
Sorry, pensé que el zip tenía los sql. Gracias
Patrick: Felicitaciones por la charla, muy buena, te quería pedir si me puedes enviar los archivos necesarios para analizar el plan de ejecución con los archivos de sql7. mi correo es amerino@previred.com Gracias.
Patrick: Estuvo muy buena la charla y bastante práctica, te felicito. Gracias por tu esfuerzo, pues se noto que te preparaste. Saludos, Jorge Ojeda
Muchas Gracias por sus comentarios. Acabo de colocar los archivos de SQL 7. Patrick.
Patrick: Te felicito por la charla, me aclaraste muchas dudas. Muchas gracias
Patrick: Me sumo a las felicitaciones, no solo se notó que la charla estaba muy bien preparada, sino que tu disposición para seguir respondiendo consultas fue excelente. Saludos Patricio Galarce
Gracias a todos por sus comentarios. Me falto además la instrucción para saltarse los bloqueos de tablas, al momento de hacer lecturas. Se debe tener cuidado ya que esto produce lecturas sucias. SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED
Excelente charla. Si bien justo ahora estoy con otro RDBMS, creo que podré extrapolar muchas ideas y aprovecharlas bastante. Muchas gracias por el esfuerzo, la calidad y tu buena disposición.
Me sumo a las felicitaciones, se agradece tener la oportunidad de asistir a este tipo de charlas donde el tema se puede poner en práctica con técnicas que nunca están de más en cualquier sistema.
entendi tu explicacion , desde pequeño me a llamadola atencion el tema de , desecriptar ya q me gusta saber que hay detras de lo que los otros no ven, no me gusta dañar, solo por curiosidad empeze, pero ahora , mesiento demaciado atraido por este tema , tengoalgunos soft pero noson presisos ( Al 100%), pero confiables, me gustaria q me mandaras algunos si es q llegas a tener o tienes , ok ciao ATTE alexander b. genio.tan@gmail.com
Como mencioné en el post Encriptación Asimétrica, existe una versión más funcional que combina algorítmos asimétricos y simétricos. Debido a que la encriptación asimétrica es casi 1000 veces más lenta que la simétrica, cuando la información a encriptar
Hace algunas semanas estuve de visita en un cliente, en donde me encontré con una aplicación que cada
Después de una extenuante semana en Buenos Aires que me obligó a estar offline casi todos los días, me
Buenisimo tema, llego ese día por lo que no creo que pueda ir. Lamento perdermela.
salu2
JP, sería un placer contar con vuestra presencia. En otra oportunidad será.
saludos,
Para quienes venimos del desarrollo utilizando Visual Basic 6.0, una de las primeras cosas que nos enseñan al empezar a utilizar código manejado (framework), es que ya no es necesario liberar la memoria porque “.net lo hace por ti”. Esta última parte
Estas últimas semanas han estado un poco aburridas. No se han presentado problemas de aplicaciones pero
Hablaremos de cómo se auto adiestra el GC para realizar recolecciones de memoria en una frecuencia medianamente determinada, con el fin de impactar lo menos posible el rendimiento de la aplicación.
Mientras investigaba para la segunda parte del artículo ¿Por qué debo definir "debug=false"
Super interesante pero no me queda claro para que sirve: numRecompilesBeforeAppRestart
gracias
Miguel,
esa propiedad permite configurar la cantidad de modificaciones que puedes hacer a los archivos aspx, ascx y asmx antes de que tu aplicacion sea reiniciada.
En la segunda parte, que debiera terminarla esta semana, lo detallaré de forma mas completa, con ejemplos e impacto.
Saludos,
Patrick
En mi anterior artículo hablaba sobre la importancia de este atributo de configuración en las aplicaciones
wow... asi como para WTF, y que haces en esos casos?
pmackay- es curioso que unas entradas salen con full feed y otras no... cual es el criterio? si pudieras poner todas las entradas en full feed seria excelente salu2
Felicitaciones! Excelente artículo, me abrió los ojos.
yyy...es muy difícil, porque en este caso, lo que se tendía que haber hecho es botar todo y comenzar de nuevo. Es difícil hacer reingeniería con algo así. El problema es muy de fondo.
Otra opción que se usa bastante en algunas empresas es “arreglar” estos problemas agregando más hardware. Para mí, esa es una pésima solución (aunque te puede salvar por un rato), pero entras en un ciclo donde irremediablemente, tarde o temprano, deberás arreglar la aplicación.
Conozco un caso donde “arreglaron” con hardware hasta que llegaron a 30 máquinas. Hicieron una gran reingeniería (tarde, pero al fin), y lograron hacer funcionar todo con sólo 4 maquinas. Al menos espero que ellos hayan aprendido la lección.
Kent
Eber,
He estado haciendo algunas modificaciones en algunos posts para dejarlos en html plano y simple, como en los viejos tiempos. Cuando lo copio desde Word, agrega una cantidad descomunal de caracteres y estilos.
Si me puedes mencionar uno que salga bien y otro mal, puedo ver dónde está la diferencia. Te lo agradecería mucho.
Siempre un placer.
Patrick.
En la primera parte de este artículo revisamos parte del impacto de definir debug ="true" en
Patrick,
Están muy interesantes los articulos de memoria. Gracias por la información. Te comento una situación para ver si te ha sucedido: Yo soy programador de C++, ahora que estoy programando en C#, y todo objeto que creo lo destruyó mediante un dispose o un utilizando el using.
La destrucción de los ArrayList y otros objetos parecidos me imagino que están relacionado al scope de donde fueron definidos y el garbage collector los destruye.
En este momento la aplicación es un servidor transaccional que tienen un pool de hilos y un hilo que recolecta hilos que hayan muerto y los destruye. Estos hilos del pool según unos criterios crean otros hilos para almacenar info en la bd y se le envia referencia a hilo recolector para que los destruya cuando han terminado.
El problema que tengo es que en Windows XP la memoria se libera bien, no presenta problemas aún bajo alto tráfico transaccional. Pero Windows 2003 no logra liberar la memoria. Mientras en XP la aplicación no sobrepasa los 50Mb, en 2003 llega bajo la misma carga a 200Mb y no baja. He probado enviarla una sobrecarga y dejarlo media hora sin recibir transacciones y la memoria no baja.
Me puedes orientar si hay alguna particularidad de 2003 en un dual core 2 que hace que no se comporte igual que el XP?
Nota: Ya trate de activarle la opción GCServer y no funciona.
Saludos
Bueno, esta especie se encuentra en abundancia en nuestra fauna chilena, pero lo más simpático de todo es cuando te obligan a usarla, incluso dando uno las razones de por que no se debería usa (perdida de años luz de la forma de desarrollo), pues bien la culpa nunca es del chancho si no del que le da el afrecho.
Tengo claro cual es tu cliente, ya que nació de esa zona esta gran creatividad. Y si necesitas ayuda para poder arreglar el entuerto también puedo aportar con unos lineamientos.
Me ha tocado sufrir por la chispas de genialidades de algunos….
Bryan,
Lo que te voy a decir ahora, seguramente no te gustará, porque normalmente no les gusta a la personas que vienen de C++. Los programadores de C++ son muy cuidadosos con la liberación de memoria y prefieren el estilo determinista por sobre el no determinista del GC.
La petición y asignación de memoria por parte del Garbage Collector (GC) se hará sin considerar la cantidad de memoria que ya esté usando éste. Dicho de otra forma, mientras haya memoria disponible en el servidor y no sea requerida por otras aplicaciones o el SO, el GC hará uso de ésta.
Además, en un servidor Windows 2003 Dual Core, hará uso del modo Server del GC. A diferencia de XP (modo Workstation) donde cada bloque asignado al GC de memoria reservada del SO es de 16 MB, en modo server, el bloque más pequeño que reserva el GC es de 64 MB. Esto no significa que toda la memoria este en uso (commit), pero puede darte señales para entender ese comportamiento.
Por último, si estás mirando la memoria consumida usando Task Manager, lo que estás mirando es el working set y no la memoria privada ni virtual. Mira este link: msmvps.com/.../posts-y-tips-de-baja-calidad-y-el-impacto-de-stos.aspx
Darz,
Muchas gracias por no dar nombres de clientes. Efectivamente es una fauna que se ha poblado por todo sud América y que tiene poco peligro de extinción. Si por mi trabajo me tocase volar fuera de Sud América podría decir si se ha repartido por todo el mundo.
Si me puedes mandar tu contacto para tenerlo en caso de ser necesario, te lo agradecería. No es necesario lo posees aquí. Puedes mandarme un contacto (msmvps.com/.../contact.aspx) con tus datos.
Gracias por la aclaración. De hecho nombre el task manager pero en realidad es una herramienta que da un profile completo de la aplicación. Al analizar en detalle encontré el problema de la aplicación. En realidad el garbage collector si está haciendo lo suyo, le dí seguimiento mediante unos profilers y encontré que la memoria asignadas a objetos convencionales está siendo relativamente bien administrada. El problema es REFLECTION, en este momento se está ejecutando dinámicamente código generado dependiendo de parámetros del sistema y de los datos o información provenientes de la transacción entrante. Las herramientas detectaron que cuando el CodeDomProvider realiza el CompileAssemblyFromSource se recarga la memoria y está no es fácilmente liberada por el GC por lo que recae en un memory leak. Encontré en varios artículos que dicen que la carga de CódigoDinámico con CodeDomProvider tiene implicaciones en memoria y que su liberación no es simple. En este momento revise información de DynamicMehtod pero me parece "poco flexible", creo que lo mejor es hacer un mini "parser/compiler" para resolver esto. Te agradecería que si conoces de una forma de compilación dinámica que no afecte la memoria en C# y sea eficiente me comentes para investigarla. Gracias por los comentarios de la memoria. Saludos.
Mi experiencia con generación y compilación de código dinámico es nula. Sin embargo, de tu respuesta puedo entender que la compilación esté generando un assembly dinámico.
Efectivamente los assemblies dinámicos no se descargar de un dominio de aplicación, y creo que ese es el leak al que haces referencia.
Una recomendación que te puedo dar, pero que debes estudiar bien para que no te afecte el rendimiento de tu aplicación, es la creación de un nuevo dominio (AppDomain) y dentro de éste, hacer la compilación. Después de terminado el proceso, podrás descargar el assembly en memoria descargando el dominio que lo contiene.
Te recalco que la creación y destrucción de dominios no tiene buen rendimiento, pero puede ser una buena alternativa si el código que quieres ejecutar no es considerado crítico en rendimiento.
usa filemon
he usado filemon, procmon y otros y además de estar accediendo a la carpeta del índice, no veo que esté leyendo otras zonas del disco....
BUeno...ya le puse reindexar y hasta ahora va bien...
En mi anterior artículo hice referencia al primer artículo de Patrick donde explicaba la importancia
Señor, cómo se puede acceder por código y saber si compilation debug es true o false ? Saludos.
Espinete,
mira, no es muy elegante, pero funciona.
using System.Reflection;
bool b;
object o = System.Configuration.ConfigurationSettings.GetConfig("system.web/compilation");
b = (bool)o.GetType().InvokeMember("_debug", BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.GetField, null, o, null);
b será verdadero o falso en dependiencia del valor de la configuración.
Muy buena explicacion sobre la distribucion de carga en servidores, como explicas no debe ser mandatorio ni la verdad absoluta, pero ayudaria bastante en ambientes productivos. Bueno ya cuando se realizo la liberacion de carga, segun lo que explicaste... por parte del servidor web o negocio.., el encolamiento estaba en otro lado (como siempre pasa hacia... la base de datos). Saludos.. muy buen articulo..
Amigo Carlos,
tu lo haz dicho. Cada vez que se "destapa" un lado, se tapa otro. Después que ajusten la base de datos se podrá ver si los WS son el cuello de botella, y se repetirá el ciclo.
muy bueno me pregunto que tan dificil seria crear una aplicacion que nos diera los valores optimos para un servidor, algo que fuera incrementando los valores de estos parametros hasta llegar al balance deseado por el usuario y que fuera mostrando uso de memoria, # de threads, etc... side note: este post no salio en full feed, no se si todavia estes haciendo ajustes salu2
a mi juicio, los valores óptimos dependen de tantos "grados de libertad" que lo que para unos usuarios es correcto, para otros puede ser nefasto.
Toma este mismo caso. Si se copian estos valores para un servidor de páginas aspx, las cuales son "pesadas", con viewstate, javascript, grandes listados, etc, seguramente el 95% del hardware "normal" colapsará en minutos. En este caso, como son web services livianos que solo realizan "selects" a la base de datos, y con respuestas breves, si funcionan.
Creo que lo que se quiso hacer con la opción <processModel autoConfig="true"/> del framework 2.0 fue eso mismo, pero a nosotros no nos funcionó y aún no se por qué. Tengo mi hipótesis, pero mientras no la pruebe, prefiero no comentar nada.
Saludos y gracias por tus palabras.
Ahora ya entiendo por qué no funciona con autoConfig.
De acuerdo a www.microsoft.com/.../default.aspx, auto config define los mismos valores del libro, es decir, "funciona" definiendo por nosotros valores fijos, sin reconfigurarse si fuese necesario debido a una mayor cantidad de requerimientos y poco uso de CPU. Nada que agregar.
Muy bueno.
Con artículo como este se hace más fácil el paso de Visual Basic 6 a 2005
Gracias
Muchas gracias. Siempre es un gusto aportar...
Buen articulo aunque seria mejor si colocas enlaces hacia sitios que profundicen en el tema.
Por ejemplo el mejor plan de mantenimiento segun lo que entiendo de tu articulo en servidores de mucha carga seria eliminar las estadisitcas en horarios de poca carga y recrearlas nuevamente?
Jean,
si te interesa ver hasta los detalles más mínimos de las estadísticas, puedes ver el libro Inside SQL Server de Kalen Delaney.
www.amazon.com/.../0735609985
En un servidor de mucha carga, si la actualización de estadísticas es un problema, se deberá deshabilitar la actualización automática y hacerlo manualmente cuando la ventana de tiempo lo permita.
Hola Patrick, que grata sorpresa es ver el trabajo que estas llevando acabo. Ya llevo como 3 horas leyendo tu blog, muy interesante.
Un abrazo
es facil echarle la culpa a MS de cosas que pasen en el sistema, yo lo he visto muchas veces...
Carlos, muchas gracias por la palabras, y honrado por tu visita.
correcto, y en especial cuando el administrador no sabe ni por donde sale el sol...
Como lo mencioné al terminar el segundo post sobre por qué no deho habilitar debug=true en web.config
Parece que a alguien lo hicieron entrar en razón.
El mensaje en http://www.vanhalen.net/ cambió radicalmente.
----------------------------------
Sign up for the Van Halen Fan Newsletter Mailing List
June 29, 2007
In an effort to keep you more informed about Van Halen, we have begun the construction of a new database for newsletter/press release recipients.
If you are interested in receiving newsletters and press releases issued by the band, please click the link below to submit your e-mail address and first and last names.
If you have registered for our newsletters in the past, please re-register your information.
Excelente Artículo.
Gracias Eminencia.
Buen artículo,pero...sigo teniendo una duda.
Como programador, debería de usar el dispose de los objetos que creo.
try
{
SqlConnection oConn = ...
catch...
finally
oConn.Close();
oConn.Dispose();
}
Saludos. Sergio.
Sergio,
cuando dices "usar" y "objetos que creo" ¿te refieres a implementar Dispose en tipos definidos por ti o en llamar a dispose de instancias de tipos creadas?
Para los primeros, si vas a manejar recursos no manejados, si debes implementar IDisposable, aunque los recursos no manejados los maneje algun tipo que tu estes manejando. Ejemplo: Si tengo una clase que tiene una propiedad del tipo de conexión a base de datos, tu clase debe implementar Dispose y éste debe llamar al Dispose de la conexión.
Para el segundo caso, que es parecido al ejemplo que posteaste ahí, tienes que garantizar que se llame Dispose, ya sea usando un using o try/finally.
Con esto basta. Dispose llama a close internamente.
Excelente blog , lo visitaré más seguido aunque a mi me gustó más Van Halen con David Lee Roth :).
Estaré en tu conferencia el 26 en Microsoft (Eso espero).
bueno, es que cualquier codigo que este en algun tipo de loop (directo o indirecto) se debe analizar mas de cerca
y las excepciones son para casos... ejem... excepcionales
pero esto del tema de las excepciones, me he dado cuenta que es uno de los temas mas dificiles de aprender para los desarrolladores, yo he visto gente con muchos años programando que no saben usar excepciones, asi que que se puede esperar
Olaa queria saber si un correo de hotmail se puede desencriptar?
Me imagino que te refieres a la contraseña de una cuenta de hotmail, que corresponde a una cuenta de live. En ese caso, las personas de live te podrán responder mejor esa pregunta.
Buenísimo Patrick
Coincido contigo y con Eber, no sólo no hay q usar inadecuadamente las excepciones sino también q aún cuando hay que usarlas... es complicado!!
Alguna vez metí un post al respecto
http://diegumzone.spaces.live.com/cns!1pHxrrKG6RzuZjEIZgyJyg0A!150.entry
Quiero recomendar a cualquiera un seminario de Krzysztof Cwalina, el papá de la biblioteca de clases básicas de .NET
www.researchchannel.org/.../displayevent.aspx
Ojo, el seminario dura como 4 horas pero si lo abren y van directo a la hora 2:23 (2 hs 23 mins), Krzysztof cuenta lo bueno, regular y malo de las excepciones, y cómo usarlas inteligentemente
Patrick, un kilo tu blog
Siempre un placer contar con su presencia en mi blog, y más aún, las felicitaciones....
Con respecto a Krzysztof Cwalina, no es joda, pero mi proximo libro es este:
Framework Design Guidelines: Conventions, Idioms, and Patterns for Reusable .NET Libraries
www.amazon.com/.../002-5670830-6047244
Voy a chequear tu post al respecto y conversamos.......
quedamos pendientes en la conversa de arquitectura el otro día
Excelente post patrick,
Las excepciones son claramente una mala opción en este caso, en su reemplazo se deberia usar uno de los metodos TryParse del framework.
Escribí un post al respecto en http://tololo.spaces.live.com/cns!8FBB5BA7A402859A!172.entry
Totolo,
concuerdo plenamente con tu comentario y el post sobre el tema. Creo que un escenario como este, trycast es más adecuado que las expresiones regulares.
Sin embargo, creo en el uso de expresiones regulares y que hay casos donde son la solución a los problemas.
Lamentablemente, éstas no son estudiadas por lo desarrolladores, probablemente por lo mismo que dices tu, porque son difíciles de entender y aplicar en ciertos escenarios. Aún así, la dificultad no es excusa.
Patrick, con respecto al postear (si es que aún no encontraste una técnica para hacerlo), lo que hago es usar Windows Live Writer, para crear mis posts, lo copio a Word, para corregir los horrores, y de ahi lo regreso al Writer, y listo :), aunque dicen que el windows live writer tiene corrector ortográfico, pero no lo he habilitado en espaniol...
Por otra lado, grande tu serie de posts :).
Muy buen post. Me entere que es un look up y tambien me di cuenta de ciertos errores en algunos sps demasiado costosos. Gracias
hoy en día utilizo Expression Web, que me parece una versión remozada de Frontpage con algunas gracias de Dreamweaver. Hasta ahora, todo bien.
También aprendí a sobrevivir a las pobres explicaciones de las opciones de RSS en esta aplicación de blog. Creo que ya le encontré la vuelta.
Alguna vez usé Live Writer, pero encontré que habían algunas cosillas con el formato que no me gustaban. Puede ser que como era versión beta no estaba del todo afinada.
por nada....siempre un gusto poder aportar.
Hola, mi gran dilema...¿Cuál creeis que sería el mejor modo de almacenar el salt? Si lo almacenas en la base de datos, el riesgo sería el mismo en caso de que accediera a ella, pues al tener el salt y el hash, el proceso para crackearlo sería el mismo que si no incluyes un salt a la encriptación y no tendría dificultad añadida; el usuario no puede recordar el salt porque es randómico y lo olvidaría; la aplicación no puede contenerlo porque sería inútil.
¿¿Es realmente útil el salt??
Jac,
El salt no fue concebido para dar la seguridad que tú mencionas. Si alguien tiene acceso a la base de datos, el salt no proveerá mucha más seguridad.
La utilidad del salt se puede medir en al menos 2 aspectos:
1.- Contraseñas iguales tendrán un hash diferente ya que el salt hará que no sean iguales (las contraseñas finales). Aunque los usuarios ingresen la parte que es igual, tú le concatenas la parte que hace la diferencia. En este caso, si se llega a comprometer una contraseña, ya sea porque el usuario la dijo o la obtuvieron ilícitamente, no se podrá comparar el hash y decir que estas otras contraseñas son iguales.
2.- Evitar ataques con Rainbow tables. Estas tablas almacenan valores precalculados de contraseña y hash. Es decir, para una contraseña, su hash correspondiente (no tengo mayores conocimientos de rainbow tables, ni como almacenan los hash ni qué algoritmos de hash utilizan). Si utilizas salt, todos los hash precalculados de la tabla no sirven.
¿Se entiende?
Te recomiendo la lectura de este link para que veas más ejemplos.
www.microsoft.com/.../sm1005.mspx
y respondiendo la otra pregunta, lo puedes alamcenar como un campo de texto en la tabla de usuarios. No es necesario protegerlo más que eso.
Señor, se puede descargar la presentación, demos, código de la charla ??
Saludos.
todo el material está diponible en el sitio de cafeina.
http://www.cafeina.cl
Es curioso que se escriba (escribas -si el "tuteo" es permisible- ) un blog acerca de las pantallas azules cuando la PC de mi casa (WVista Business) la enciendo y pasan cierto numero de minutos y sale una pantalla Azul.
No le puedo echar la culpa al Windows ese error comenzo cuando instale ciertas aplicaciones despues ya de varios meses usando el sistema sin problemas
De acuerdo a lo que leo del blog me queda una duda: Si mi problema no era por drivers porque despues de la formateada volvi a instalar los drivers el problema no aparecio hasta que instale un firewall, el babylon y un programa de maquinas virtuales (vmware),¡Es posible echarle la culpa a esas aplicaciones (ring 3 -creo-) del pantallaso? -Una posible alternativa seria el vmware (ring1) pero eso me trae ciertas dudas ya que la volvi a formatear y no instale el vmware y volvio a aparecer. Error de Hardware quizas pero regrese a una version anterior del C antes de instalar nada y no pasa.
GSus,
Es imposible que una pantalla azul sea provocada por una aplicación, salvo que ésta instale drivers que corran en el kernel de Windows.
Interesante lo de VMWare. En el artículo, mencioné Virtual Server y Virtual PC. Tiendo a pensar que VMWare tambien funciona en anilo 1, pero no tengo mayor información.
Si puedes reproducir el problema, cuando ocurra, toma una foto de la pantalla y conversémosla. Espero poder ayudarte a encontrar quién es el culpable, el cual, podría ser código de Vista...quién sabe...
Si te animas a más, configura Vista para que tome un Dump de la memoria del Kernel cuando ocurra y así poder revisarla, aunque ese dump va a pesar algunos gigas.
PD: Por supuesto que se puede tutear...
muy bueno, muy informativo tu articulo!
realmente interesante lo recomendare en la universidad, esta muy bueno el articulo y sus curiosodades, de verada hace años k no leo con tanta atencion un blog, muchas gracias, te vas a favoritos =)
Muy buen post. Yo tuve un experiencia con pantallas azules en Windows 2000. La verdad no tengo el pantallazo y no recuerdo nada de lo que decía, pero despues de probar distintas alternativas de solución, "logré" solucionar el problema cambiando una tarjeta de memoria ram (tenía 2 una de 128MB y una de 256MB). Ponía la tarjeta y pantalla azul, sacaba la tarjeta y todo bién. Mi problema estaba dentro del 10%, problema de hardware (por suerte era la de 128MB).
Claudio Pérz
Hola,
si hay que hacer apuestas creo que IIS y Google se van a llevar el premio gordo.
buen articulo, aclaratorio
lindas pantallas azules .. por ahi tengo el video del bochorno de Gates y su win98 ... un clásico!!
saludos desde el metro Salvador, Stgo de chile
:)
Existe una utilidad de Sysinternals para "colgar" a Windows a drede, se llama "NotMyFault".
Pablo,
efectivamente esa aplicación existe, pero tiene dos componentes principales. La interfaz de usuario y un driver de kernel llamado Myfault.sys.
Detalles podrás encontrar en el blog de Mark.
blogs.technet.com/.../unkillable-processes.aspx
Como vimos, los problemas de drivers son los que más problemas le traen a Windows.
Una aplicación no puede botar el sistema si no tiene una "ayuda" en el kernel.
De eso me estoy convenciendo. Aun no he tenido tiempo de conseguir camara y de volver a querer ver una pantalla azul en mi monitor. Hace tiempo que no veo la pantalla azul desde que deje de usar el babylon y el vmware pero aun lo tengo pendiente.Gracias
Pingback from apartment » Microsoft.VisualBasic.dll, ??Eres tan malo como dicen?
Un saludo a los de Apple que creen que su software es infalible. Su recien liberado sistema Mac OS X "Leopard" lanzó sus primeras pantallas azules.
Mas info en:
docs.info.apple.com/article.html
Para confirmar lo que mi amigo Patrick MacKay explica en estos 3 artículos: ¿Por qué debo definir "debug
como hago para ver el codigo de io.dll es para hacer un trabajo de la universidad y me urge...
muchas gracias
mi correo es alevilla86@hotmail.com
Alejandro,
puedes usar reflector para ver el codigo IL de los ensamblados. Me imagino que te refieres a system.io.dll.
Durante el análisis de Microsoft.VisualBasic.dll tuve problemas para poder ver los contadores de rendimiento
holaaaaaaa¿¿¿¿¿????? primero q nada este programa no me gusta tiene q tener algo mas importante en el campo de la estadistica!!!!!!!!!!!!!!!!!!!!!!!!
POR FAVOR ANTES DE CREAR UNA PAGINA PIENSEN EN EL FUTURO DE LOS DEMAS OK¿¿¿¿¿¿¿¿¿¿¿¿¿¿¿!!!!!!!!!!!!!!!!
mmm, creo no entender a qué te refieres...¿puedes ser más precisa?....
Muy buen articulo, explicito y bien elaborado. Me gustaria leer otros articulos suyos.
Hay que ver como le va a IIS 7, creo que se el premio gordo se lo lleva MS, si mantiene estabilidad y mejoras en la configuración amigable, creoq eu se viene fuerte IIS 7.
salu2 nos bites ;-)
comparto...aunque Apache repuntó bastante el último mes...claramente no se va a definir en un par de meses como yo había vaticinado....
muchas gracias.
Casi todo lo escrito está aquí en este blog. Tengo que mover unas cosas de mtj.net acá..
¿Qué sucede si uno no se siente bien?; en condiciones normales, uno visita al doctor para saber qué sucede
hola!
yo tambien tengo un problema con pantallas azules en una lap, yo tengo el windows vista basic, y despues de un tiempo que compre el equipo me empezaron aparecer las pantallas azules, estas no son frecuentes, pueden pasar dias o semanas, y como son en ingles y no tarda mucho pues no he podido leelos completamente, dice algo asi como: drivers y otras cosas mas, no soy muy experto en esto, mas bien, nada. me he dado cuenta que esto pasa solo cuando me conecto a internet y con una red, bueno esa es mi conclusion, por que en la escuela nunca me a pasado y siempre estoy conectado, es posible que sea la configuracion de internet? puede afectar algun hardware con el tiempo o es debido a un dterioro de uno de ellos?
Hola Chava,
si pudieses tomar una foto de la pantalla podria ayudar. Podrias probar presionando el boton de pausa. Si mal no recuerdo ese boton pausa cuando se está realizando el booteo así que podría ser útil en ese caso.
La otra opción es configurar el sistema para que tome un dump de la memoria cuando falle. En vista no se donde se hace pero en XP se hace en:
Panel de control->System->Advanced->StartUpAndRecovery->SystemFailure.
Me imagino que vista tiene alguna pantalla similar para eso.
Teniendo un dump o una foto, podemos encontrar más pistas.
si ocurre
Excelente esperando la segunda Parte, Patrick te debo los monitoreos XD...
Continuando con los signos vitales de un servidor, hoy día veremos en la segunda parte, el procesador
Excelete post y mejor analisis.
Una de las cosas que me sorprende, es la habilidad de esta herramienta que usas, Debugging Tool For Windows, al parecer tiene mucho que decir de nuestras aplicaciones, voy a tratar de ver como lograstes que te entregase toda esa informacion..
Otra cosa, me extraño que no incluyeses una cuarta conclusion respecto de no utilizar DataSet (jeje)
Rodrigo
jajaja...así es.... primero, muchas gracias por las felicitaciones.
debugging tools + sos es impresionante. No necesitas nada más para saber la verdad de las cosas..
y sí, podría haber colocado un par más, pero cuando haces análisis te debes guíar por la información objetiva.
El que yo deteste los datasets por los motivos que tu sabes, no hará que la aplicación tenga estos problemas :)
Saludos y siempre un gusto tenerlo por aquí. ¿cuándo lo veremos escribiendo?
HOLA HE TENIDO LA INQUIETUD DE IMPLEMENTAR UN SISTEMA DE VISION PERO ME HAN MENCIONADO QUE LA LLAMADA A LIBRERIAS DLL ME SERIAN MUY UTILES PERO PARA SER SINCERO SOY UN PRINCIPIANTE EN EL AREA DE VISUAL BASIC NO SE SI PODRIAS AYUDARME CON ESA DUDA, COMO LLAMAR A DLL CON VISUAL BASIC
AL52848,
por supuesto que puedo ayudarte. Necesito eso si que seas más específico en cómo quieres que sea. ¿Qué andas buscando?
Pingback from A-ha » Blog Archive » Internet Explorer se cuelga por algunos segundos
en el ultimo comentario respecto al codigo de dispose, indicas que al llamar a Dispose internamente tambien se llama a close (esto refiriendome a un código que se conecta a una BD).
Entonces que diferencias hay al usar close() y dispose()? o cuando usar uno de ellos o en que casos?
atte.
Max,
Excelente pregunta. Dispose en algunos casos implementados hace algo similar a close, sin embargo, no debes basarte solo en eso. Te cuento.
En la teoría (no refiriéndome a objetos de conexión a BD sino que a reglas generales), Close permite liberar algunos recursos, pero deja el objeto en un estado sobre el cual se pueden seguir ejecutando acciones como Abrir nuevamente la conexión.
Siguiendo la teoría, si se utiliza Dispose, se entiende que el objeto no será utilizado nuevamente, y cualquier llamada a algún método de este, como tratar de abrirlo nuevamente, no debiera tener éxito y una excepción debiera lanzarse.
Si te animas, en este caso hay un ejemplo de una mala implementación de Dispose en Sharepoint que lleva a problemas en Webparts de usuario. Te aviso que el post está muy denso y enredado.
msmvps.com/.../sharepoint1.aspx
No les ha pasado que luego de cierto tiempo notan que su IE7 comienza a ser un poco mas lento de lo acostumbrado
De ahora en adelante [PLEFDS = para leer el fin de semana]. Digamos que hay dos maneras de tener el código
No tengo mas que agradecer que compartas tus conocimientos. El año pasado estuve mas de 3 hrs en una maratónica charla en Microsoft sobre optimización SQL donde se trató el tema aca expuesto.
Estas últimas semana s he tenido que realizar algunas optimizaciones a algunos procedimientos almacenados en mi trabajo.
En particular logré bajar la cantidad de Reads de uno de estos SPs a un 10% de lo que ya tenía. Es decir de 2500 Reads a 250 a modo de ejemplo. Quizas a esta escala no se note tanto pero cuando hablamos de bajar de 50 mil Reads a 5 mil o de 100 mil a 10 mil las mejorría se nota sobre todo cuando se tiene una enorme concurrencia como es en nuestro caso.
Bueno como conseguí esto?
primero recordando la teoria sobre los indices cluster y no cluster y luego dandole un vistazo a las característcas de la tabla en especial sus indices.
Un indice tenia al campo 1, 2 y 3 y el join utilizaba el campo 1 y 3. Bastó agregar al join el campo 2 y tuvo un excelente efecto.
Que efectos tuvo? Se elimnó el Index Scan en el join de estas tablas y apareció un Index Seek.
Es impresionante como un pequeño ajuste puede producir mejoras importantes en el plan de ejecución de una consulta.
Ahora no hago las consultas a ciegas, sino que le doy un vistazo a las características de las tablas y utilizar las "herramientas" que tiene disponibles para darle un manito al motor de base de datos.
Bueno espero no aburrir, pero filo ya me explayé :).
Un abrazo Patrick
Claudio Perez O.
Sorpresas te llevas en la vida, siempre. A pesar de lo que parezca, hoy no ando sermoneador ni nada por
Todo acerca de Inline, beside, behind, Web Site Project y Web Application Project. De ahora en adelante
Gracias, muy útil y bien explicado, mi servidor te lo agradece ;)
Muchas gracias....
¿estaban con problemas de mucho uso de memoria?
Como estan.
Super adecuada la explicacion. Sobre todo que la ejecucion del GC se da en algun momento del tiempo no determinado, y que este libera las porciones de memoria que no estan referenciadas por ningun objeto de algun contexto. ( lo que se hace al hacer un objeto igual a nothing.)
Pero tengo una pregunta:
Para las entidades de negocio que transportan valores entre capas (un Entity), se justifica el desgaste para el programador de ponerlas a implemetar IDisposable?
Quedo atento a sus comentarios, Gracias.
Tengo una aplicacion en silvelight en el cual creo diferentes controles, traté de liberar memoria eliminando los objetos, no se veia la memoria lierada en el IE7, hasta que usé el GC.Collect().
Diego,
si las entidades tienen solo tipos básicos, entendiendose como básico tipos como strings, ints, booleans, etc., no es necesario y sería una perdida de tiempo. Preguntate lo siguiente. Si la entidad implementara Dispose, ¿qué liberarías cuando alguien llame a dispose?
Por otra parte, si tu entidad tiene algun campo que sea un dataset o un stream, debieras implementar IDisposable, y en el método dispose, llamar al dispose del dataset y al close del stream.
Mike,
eso es esperado. Revisa este post y conversemos.
msmvps.com/.../post0b.aspx
Muy bien explicado el artículo, me ha aclarado muchas cosas.
Muchas gracias :)
Buena tarde, tengo una aplicación que se desarollo en v.0, luego fue mirgada a 6.0, y actualmente esta montada en un servidor de terminal server y mas de 100 usuarios se conectan atravez deeste servidor, pero se esta presentado el inconveniente que én cualquier momento y cualquier usuario, llena la memoria del servidor y bloquea el funcionamiento de los demás que puedo hacer, que se debe ??
gracias, pueden escribir a compujab@hotmail.com
Primero que nada, felicitaciones por tan excelente post.
Ahora, te comento: soy algo nuevo en esto de tracear info de procesos, obtener dumps, analizarlos y demás y tengo la imperiosa necesidad de llevar a cabo estas acciones en una aplicación web de la cual participo del desarrollo.
Me bajé e instalé el Debugging Tools for Windows, pero no logro llegar al nivel de detalle que vos mostras acá.
Solo me attacheo al WP de ASPNET y me tira una chorrera de información que en realidad mucho no me dice (o no se interpretarlo correctamente, lo cual tambien es muy probable =P).
De verdad me seria muy útil lograr "ver" de alguna forma si me están quedando colgados en algún lado objetos de algún tipo, ya que, si bien los WP no están ni a la mitad de los 500Mb que mencionas para considerarlos "sospechosos"... la gente de tecnología del cliente nos reclama el alto consumo de memoria de estos.
Sin más, te saludo muy atentamente.
Diego Cañizares, BSAS, Argentina
déjame tu correo utilizando el formulario de contacto (msmvps.com/.../contact.aspx).
Hola:mi problema es que desde mi laptop ( y no desde otras pc) no puedo acceder a mi cuenta de hotmail o yahoo, ya que luego de poner la contrasenia aparece un mensaje de error: HTTP 400 LA PAGINA WEB NO PUEDE SER ENCONTRADA y un candado aparece al lado de la barra de direcciones de IE.En otras ocasiones pude acceder a mi cuenta pero al clickear para leer los mails, vuelve a aparecer el mensaje de error.
Que tengo que hacer?, (es solo desde esta maquina y no sucede con otras)
Gracias por la pronta respuesta
Andrea,
fíjate que la fecha y hora esté correcta en tu equipo.
Hola Patrick
Es la primera ves que leo tu Blog, me agradan los contenidos
Yo Uso varios So por diversas razones, y al igual que vos,opino que todos tienen problemas.
Que uno sea mas estable que otro, Ok, Mas Usable, Tambien.
Pero para poder entender esto, solo hay que hacerse algnas preguntas
Cuantos usuarios usan Linux y cuantos Windows ?
Porque ?
En Que Sector esta enfocado uno y otro ?
Cual es mas usable.?
y aqui seria un largo etcetera
Es como cuando te piden una solucion de desarrollo de sistema.
En mi caso, como profesional, para que le voy brindar una solucion n-capas a una empresa que lo unico que quiere es ver el stock en la web ?
Se entiende ?
CG
PMACKAY: SI, LA FECHA Y HORA ESTAN CORRECTAS.lO LLAMATIVO ES QUE ESTO EMPEZÓ A SUCEDER LUEGO QUE ME INSTALARAN EL MODEM.aNTES NO TENÍA PROBLEMAS, AUNQUE EN LA COMPANIA QUE ME LO INSTALO DICEN QUE NO TIENE NADA QUE VER CON ELLOS, Y QUE PODRIA SER UN TEMA DEL EXPLORADOR, POR LO QUE ME SUGIRIERON HACERLO CON MOZILLA.tAMPOCO SE SOLUCIONO EL PROBLEMA.
sIGO A LA ESPERA DE AYUDA!!!!!!gRACIAS
Muy buena la explicación, generalmente me encuentro con personas que consultan acerca de este tipo de escenarios, la mayoria opta por el famoso restart.
saludos cordiales.
Buenas, muy buen trabajo debugando el proceso!
Una cosa que puede que te dé alguna pista más. El error de SWorkingProccess normalmente está asociado a cuando un usuario cierra el navegador cuando todavía no ha acabado de generarse la página y está renderizando con el buffer activado. Es imposible evitarlo, pero se puede llegar a liberar la memoria si cazas la excepción dentro del global.asax.
No sé si te habré ayudado o confundido! Un saludo
Perdona, antes he puesto IISWorkingProccess cuando quería decir ISAPIWorkerRequestInProcForIIS6
Mucho se ha hablado (por ejemplo aquí , aquí , aquí , aquí ...) acerca de lo terrible que puede resultar
Excelente artículo, Muchas Gracias por la explicación.
Excelente, hace un tiempo me paso eso, pero usando javascript, que lamentablemente no tiene no stringbuilder. Excelente el blog. hoy lo descubri, y aprendi mucho. Muchas Gracias!
Es impresionante este blog de alto contenido técnico, el 90% de las cosas no las entiendo pero aún asi me parece un trabajo bastante interesante, al autor del blog solo comentarle cual fue su formación técnica para tener los conocimientos q tiene sobre el analisis de aplicaciones? Enhorabuena por el blog!!
gracias por tus palabras. Si tuviese que definir cual ha sido uno de los mejores libros que te pueden ayudar a realizar este trabajo, elegiría "Windows Internals" de Mark Russinovich y David Solomon.
Entender el funcionamiento de Windows es la base para el resto. IIS, SQL, ASP, ASPNET y otros productos usan las funcionalidades que el sistema operativo expone.
Para este caso en especial, está involucrado el memory manager de windows, y ojo que no significa que funcione mal, pero entendiendo como funciona la memoria en windows, sabes adonde apuntar cuando estás buscando los soluciones para las aplicaciones con problemas.
Hay otros libros muy útiles también, pero lo mas importante es entender "el ambiente" (el sistema operativo) donde corren las aplicaciones.
Supongo que sera fundamental como dices y que te habrán hecho falta conocimientos muy sólidos de sistemas operativos para poder ver como funciona todo el tinglado.
Como sugerencia te animo a que en alguna ocasión y ya que esta tan de moda el J2EE y Java escribas algun post con algún análisis sobre rendimiento y monitoreo de las aplicaciones en la JVM.
Un saludo desde España y felicitaciones de nuevo por el blog, francamente interesante.
vos sos un groso mal... buscando ver si tenia q poner vista64 si o si para poder ponerle 4gb a mi makina nueva cai aca... y no podia creer q alguien sepa tanto jajja
sos un capo maN!!!
felicitaciones...
kiero q seas mi tio jajaja
Felicitaciones!, recién me he topado con tu página. buscando sobre memoria del Kernel he llegado hasta aquí. La verdad es que fue solo por intrusear.
No se si tu me puedes ayudar con un problema que tengo con el Window Vista Home Premium.
No he podido instalar el Easy PHP, me dice que el puerto esta ocupado por otro servidor, se refiere a que no me permite cargar el apache. He realizado varios revisiones como asociar el EsayPHP al Firewall, tengo dudas si Norton me esta objetando..El IIS esta desactivado y no se que mas hacer...¡Auxilio!
Ahora en el semestre que viene me van a dar duro con PHP MySQL..
Adrián Faúndez
Adrián,
¿por qué PHP necesitaría un puerto?. Nunca lo he instalado, pero no veo la relación entre un lenguage de programación y un puerto. Apache es quién debiera "tomarse" algunos puertos.
Lograste hacer que Apache funcione como servidor web?, que al menos sirva contenido estático?
Veamos primero que el servidor funcione...
Hola , tu conclusion sobre las estadisticas esta muy buena , me ayudaron mucho a entender el proceso que sigue sql con respecto a las estadisticas, me gustaria saber como se puede revisar el log de transacciones de sql , para averiguar datos acerca de los datos de una tabla especifica , quien modifico , cuando a que hora , cual era el valor antes de la modificacion etc.
de antemano te doy las gracias por tu ayuda
Richarth
Lima-Peru
Richarth,
si necesitas saber esa información, puedes activar el modo de auditabilidad C2.
Más info en
technet.microsoft.com/.../ms189114.aspx
Hola.
Sigo tu blog interesantisimo!! La realidad es que por mi trabajo , y por mi gran interes por este tema de analizar los dump de los procesos , tengo suma necesidad de saber como analizarlos.
Hoy por hoy en mi trabajo ( administrador del IIS )tengo problemas con una aplicacion que se cuelga y llegue al punto de tener que analizar si o si , ya que si no los programadores y yo , no tenemos mas que tocar.
Estoy usando el debugdiag 1.1 , me tira un analisis que no tengo manera de justificarlo ya que no entiendo bien el porque de ese analisis.
No encuentro informacion que me ayude a como empezar de cero a comprenderlos y analizarlos.
Si podes brindarme informacion como lograrlo realmente te lo agradeceria.
Desde ya muchas gracias.
Lamentablemente la pregunta que me haces no es fácil de responder. Si tu estas en cero, es bastante el camino que tienes que recorrer. Para nada imposible, pero si es extenso.
Hay tipos de problemas que requieren saber más y otros menos. Por ejemplo, aplicaciones con 100% de uso de CPU son las más simples de resolver. Un par de dumps, debugdiag o windbg y listo.
Aplicaciones con consumo de memoria elevado, si es código manejado, no debiera ser difícil, pero para código no manejado, es considerablemente más difícil, y requiere seguir una serie de pasos para poder hacer troubleshooting. Debugdiag puede ser tan útil como inútil en este caso.
Finalmente, crash o hangs, ufff, es todo un mundo. Si tienes el reporte de debug diag, mándamelo para verlo y avanzamos.
Si realmente quieres aprender de esto y estás dispuesto a invertir una cantidad interesante de tiempo (un par de años en mi caso), te recomiendo comenzar con el libro Windows Internals de Rusinovich y Solomon. Una vez que se tiene la base de cómo funciona Windows, el análisis de dumps se simplifica bastante porque aprendes a interpretar muchas cosas y descartar otras que sabes que son "normales".
Sin querer desanimarte, si tus expectativas son aprender a hacer esto en 1 mes, es una ambición utópica.
Buenas,
Me ha encantado el artículo, una vez estuve buscando información sobre este mismo tema y desgraciadamente no te encontré, hoy me lo han pasado y me ha abierto el apetito; ¿Podrías pasarme algún enlace con mas información sobre este tema? Yo buscaré también por mi cuenta pero quizás tengas algo que valga la pena por ahí... ;)
Un saludo y muchas gracias.
Ruben,
estos links tienen una explicación de cómo funciona el garbage collector y otro sobre cómo implementar dispose correctamente.
msdn.microsoft.com/.../bb985010(en-us).aspx
msdn.microsoft.com/.../bb985011(en-us).aspx
www.bluebytesoftware.com/.../PermaLink.aspx
Te comento que este último está para leerlo bien despierto. No lo dejes como lectura de noche..... aunque realmente los otros dos tampoco....
Un articulo genial, gracias por la explicación :-D !!
Hola que tal esta muy interesante esta algoritmo y me interesa bastante ya que estoy trabajando con tranferir algunos datos incriptados te agradeceris si me pudieras mandar el codigo para desencriptar a mi correo grax!!! eerm_15@hotmail.com
Carlos,
todo lo que necesitas está publicado en este post, con más información y ejemplos para copiar.
msmvps.com/.../post28.aspx
Me parece excelente, lo voy a probar. Pienso que es muy útil para aplicaciones que todavía no se han migrado a .NET y que se necesita que sean rápidas.
Walter,
cuéntame como te fue con las pruebas. No tengo registros de que alguien lo haya usado más allá de pruebas experimentales. La información que proveas será muy valiosa.
Realmente, un artículo muy práctico. Se agradece el código fuente.
Una duda que me queda, el vector de inicialización ¿lo debe implementar uno mismo o se deja a cargo del algoritmo?
muchas gracias. Puedes dejar que lo cree internamente. Así podemos estar seguros de que posee la entropía necesaria.
Buenas!.... necesito saber COMO podemos guardar el TRACE de la compilacion en nuestro disco,,,
Me dijeron q habia una configuracion en especial que hacia posible esto... desde la Web Config...
Le agradeceria su Rta.....
Janette,
no tengo conocimientos que haya alguna forma de hacerlo en asp.net. Creo eso sí, que utilizando ETW podrías lograrlo. te dejo algunos links de utilidad:
msdn.microsoft.com/.../cc163437.aspx
www.microsoft.com/.../594174a1-f8d4-4338-a996-9c171e7bc3a2.mspx
www.microsoft.com/.../4a6b8c2b-2752-487f-b049-b5b1bce1f715.mspx
Yo ultimamente he tenido un problema
con un notebook Hp con windows vista
No es muy seguido el pantallazo azul,
.Mas que nada este NB trabaja con aplicaciones
utilitarias, word, excel, etc, a lo mas trabaja
un autocad sobre el, pero nada mas complejo en relacion a aplicaciones.
Si me pudieses echar una mano te lo agradeceria mucho.
De antemano Gracias
Deje mi mail en respuesta.
Matías,
revisa en el visor de eventos de windows cual es el "stop code" de windows y el resto de información que aparece ahí y mandamela por mail utilizando el formulario de contacto de este blog.
He probado tú código en una aplicación que estoy desarrollando, donde genero una tabla en Html que luego se mostrará en un correo electronico, y la verdad es que funciona perfectamente.
Saludos y gracias
Para un curso que estoy preparando recurrí a este artículo como fuente de información sobre la repartición del mercado de los webservers... lo interesante es que después de 1 año, todo sigue igual, estabilizandose el market share...
Alguien podría transformar el codigo en VB.net, gracias
Nelson,
puedes compilar el proyecto y luego utilizar reflector para transformar el IL en C#. Esto debe funcionar.
Muy bueno el articulo, muchas grs por la explicacion
Muy bueno este post, cuando estara la tercera entrega?
Muy buena explicación sobre la encriptación, me ha gustado para enseñarlo en una clase. Hay algun sitio donde puedo bajar el programa?.
Excelente explicación. Existe algun link donde pueda bajar este programa.
Existe algun link donde pueda bajar este programa?
Ivan,
al inicio del post está un link con acceso al código fuente.
Muchas gracias por el articulo. Aunque llevo tiempo programando a nivel profesional en C++ y Java, aún soy novato con .net y he caído en el error de leer donde no debía.
Tenía un problema de memoria con un programa que estoy realizando y realmente usar GC.Collect no ha resultado ser una buena opción, mi proceso comenzaba a consumir memoria, poco a poco, hasta colapsar el sistema. Uno de los errores que comentí parece ser que no liberé bien los recursoso de un socket y por otro lado el trabajo con XML de forma integrá no resultó ser tampoco muy recomendable así que lo he sustituido por listas de XmlElemnts que luego he limpiado a mando como tu recomiendas.
Tras esto, eliminé el uso del GC.Collect y de momento se ha estabilizado en unos 14,76 Mb. Antes sobrepasaba los 200 Mb antes de caer.
Lo dicho muchas gracias y habrá que tener cuidado con lo que dejamos en mandos del GC.
excelentes palabras. Lo mejor que se puede hacer con el garbage collector es dejarlo trabajar tranquilo.... y preocuparse de liberar los recursos no administrados.....
Saludos y gracias por tus palabras
Pingback from Modo debug y realese | hilpers
Pingback from Forzar el borrado de un objeto de memoria | hilpers
Hola, excelente articulo. Como me linkeo a la parte I que mencionas en este articulo?
Disculpa ya encontre el link en la pagina...Gracias
Buen articulo tambien, pero me gustaria saber en que momento se debe considerar crear las estadisticas o nuevas estadisticas, si no esta la creacion de manera automatica? Puede incluirse en un plan de mantenimiento semanal?
Gracias...
Fabiola,
la respuesta depende de cuantos datos se consideren en el muestreo. Si se opta por tomar el 100% de los datos y la tabla es grande, tenlo por seguro que eso tomará tiempo e impactará el servicio que está entregando el servidor.
Generalmente se hace en un plan de mantención similar al con que se reconstruyen o defragmentan los índices.
Genial, desde su publicación hace dos años, este artículo continua estando vigente al másimo.
Gracias a él, un novato como yo, he podido concretar por qué se partía mi programa con Native error 0xc0000005.
Es una función que graba los datos de un form en la .sdf, tanto el form lo cerraba con close() y llamaba a otra instancia limpia, la conexión la cerraba tras grabar los datos también con close() tras unos minutos de uso partía sin razón aparente.
GRACIAS EN MAYÚSCULAS
Hace ya un tiempo publiqué un post donde hablaba de liberación de memoria en código
esta buenísimo....
hola saludos,
me interesaria saber mas acerca de los temas de mirar el rendimiento de los servidores a nivel de procesador disco y ram. debido a que en eso se basa mi tesis.
Almenos saber de donde se basan para hacer estos analisis y todo eso.
me seria de mucha ayuda la bibliografia
de antemano gracias por la ayuda
mi email es rafael4121@hotmail.com
He llegado aquí de casualidad, buscando info sobre estadísticas de SQL Server.
Coincido en que es un buen artículo. Felicidades chaval.
Y no sería mala idea que pusieras el link al artículo primero.
Bull, el link está en el segundo párrafo :)
pmackay:
Primero darte las gracias por esto, ya q no toda la gente se da el tiempo para explicar con tanta buena voluntad.
te cuento... tengo una aplicacion en .net con c# y la parte grafica esta implementada en flash, estamos ademas cargando .mht en webbrowser, el problema mas grande es que llamando al metodo dispose y asignando null a los objetos, solo consigo bajarle al uso de memoria, pero el uso de la memoria virtual sube, sube y no para de subir hasta que se cae el programa. e usado detodo, hasta el GC.collect() y solo consigo bajarle lo comentado... la memoria virtual se me escapa...
espero una ayudita de tu parte...
de antemano muchas gracias.
Felipe B.
Felipe,
si estás utilizando componentes no manejados (com), después de usarlos, debes liberar el RCW utilizando Marshal.ReleaseComObject(objeto)
dotnetdebug.net/.../marshalreleasecomobject-and-cpu-spinning
Otra cosa que se me ocurre es preguntarte si estan usando consutlas con ado.net, con cursores del lado del cliente?
MIRA AUN NO UTILIZO Marshal.ReleaseComObject(objeto) PARA HACER PRUEBAS PERO RESPECTO A TU PREGUNTA TE PUEDO COMENTAR QUE EL PROYECTO ES LOCAL (PC AUTOSERVICIO PARA IMPRIMIR INFORMACION QUE ESTA DENTRO DEL PROYECTO EN FORMATO .MHT), Y AL REALIZARLO SIN IMPLEMENTAR FLASH, NO EXISTE NINGUN PROBLEMA, EL PROBLEMA ES FLASH.
SALUDOS
hola.
e estado todos estos dias haciendo pruebas y mi conclusion es q el objeto axShockwaveFlash de flash cada vez que lo llamo de una pagina a otra se aloja en la memoria virtual y el uso de memoria casi a la par y utilizando el close, dispose gc.collect() no baja nada... estoy tratando de utilizar Marshal.ReleaseComObject(objeto) y nose si lo estoy utilizando mal o que, pero no logro bajarle a la virtual y al parecer no estoy eliminado el objeto.
me tiene preocupado este tema.
espero puedas ayudarme y gracias otra vez.
saludos
mmmm, en estos casos, te recomiendo bajar la ultima versión del componente que estas usando.....
si el problema persiste, ver en los foros de Adobe.... con un poco de suerte, podría estar ahí la respuesta (o al menos el consuelo de que no eres el único)...
Finalmente, si te animas a tomar un dump de la memoria del proceso, puedo revisarlo y ver si hay algo por ahí......
saludos...
Solo queria contarte que consegui solucionarlo... el metodo para solucionarlo es el siguiente,el problema es q el flash genera los controles de los botones cada vez que se crea un form... la forma era no crear el new objeto flash, sino que pasar los controles por parametros... eso.
saludos y gracias.
gracias por la información....
Hola, quise descargar el material pero hay un error en la pagina
me lo pueden enviar al siguiente mail: slagos@assist.com.uy ??
muchas gracias!
My tree at Carbon grove