Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - NetJava

#141
Buenas,

os pregunto unas cuantas cosas que son especificas y supongo que esos conocimientos los da la experiencia jejeje. Todo esto en cuanto a rendimiento de la aplicación.

1.- Que es mejor, crear un objeto y utilizar el mismo 4 veces o crear 4 objetos¿? Por ejemplo yo cuando lanzo hilos, por cada botón tengo un objeto de la clase hilo. A lo mejor debería crear una variable private instanciarla, y llamarla en los botones con el método necesario.

2.- Cuando se conecta a una base de datos, que resulta más eficiente, conectar una vez, ejecutar tus acciones y cerrar conexión. O mantener la conexión "abierta" para siempre que la necesitéis.

Esta aplicación puede llegar a saturar mi ordenador en cuanto más hilos ponga a rular, afectando a la CPU. Ya habéis visto como va, por el código. ¿Es normal que el ordenador se sature?

Muchas gracias y saludos!

Aun q ya es un poco tarde por que hace tiempo que estoy con este tema, intento ver hasta donde puedo llegar, aun q esto se tenía que hacer antes, pero bueno. 
#142
Buenas, pues muchas gracias, te voy a poner más inf.

Lo primero es decir que se crea un objeto thread para cada bucle. Al igual que hay un objeto diferente de conexión con la BD para cada bucle.

Código (java) [Seleccionar]

...
...
...
//este código esta dentro de la clase Thread, en un case dentro del método run()
case 15:algoritx.GenerarDiccionario6_1(this.jlbl_0); break;
case 16:algoritx.GenerarDiccionario6_1_1(this.jlbl_0); break;
case 17:algoritx.GenerarDiccionario6_2(this.jlbl_0); break;
case 18:algoritx.GenerarDiccionario6_2_1(this.jlbl_0); break;
case 19:algoritx.GenerarDiccionario6_3(this.jlbl_0); break;
case 20:algoritx.GenerarDiccionario6_3_1(this.jlbl_0); break;
...
...
...
//algoritx el el objeto de la clase algoritmo donde se encuentran todos los bucles.
public void GenerarDiccionario6_1(JLabel jlbl_0){
DBManagementx DBM11 = new DBManagementx();
String ContentCarac = "";
String c1 = "";
String c2 = "";
String c3 = "";
String c4 = "";
String c5 = "";
for(int a = 0; a < 10; a++){
c1 = caracteres1[a];
for(int e = 0; e < 15; e++){
c2 = caracteres1[e];
for(int i = 0; i < 32; i++){
c3 = caracteres1[i];
for(int o = 0; o < 32; o++){
c4 = caracteres1[o];
for(int u = 0; u < 32; u++){
c5 = caracteres1[u];
for(int A = 0; A < 32; A++){
ContentCarac = c1 + c2 + c3 + c4 + c5 +caracteres1[A];
DBM11.fillTablex(ContentCarac, jlbl_0);
//JOptionPane.showMessageDialog(null,""+ContentCarac,"Message",JOptionPane.INFORMATION_MESSAGE);
ContentCarac = "";
}
}
}
}
}
}
DBM11 = null;
}

public void GenerarDiccionario6_1_1(JLabel jlbl_0){
DBManagementx DBM11 = new DBManagementx();
String ContentCarac = "";
String c1 = "";
String c2 = "";
String c3 = "";
String c4 = "";
String c5 = "";
for(int a = 0; a < 10; a++){
c1 = caracteres1[a];
for(int e = 15; e < 32; e++){
c2 = caracteres1[e];
for(int i = 0; i < 32; i++){
c3 = caracteres1[i];
for(int o = 0; o < 32; o++){
c4 = caracteres1[o];
for(int u = 0; u < 32; u++){
c5 = caracteres1[u];
for(int A = 0; A < 32; A++){
ContentCarac = c1 + c2 + c3 + c4 + c5 +caracteres1[A];
DBM11.fillTablex(ContentCarac, jlbl_0);
//JOptionPane.showMessageDialog(null,""+ContentCarac,"Message",JOptionPane.INFORMATION_MESSAGE);
ContentCarac = "";
}
}
}
}
}
}
DBM11 = null;
}

public void GenerarDiccionario6_2(JLabel jlbl_0){
DBManagementx DBM11 = new DBManagementx();
String ContentCarac = "";
String c1 = "";
String c2 = "";
String c3 = "";
String c4 = "";
String c5 = "";
for(int a = 10; a < 20; a++){
c1 = caracteres1[a];
for(int e = 0; e < 15; e++){
c2 = caracteres1[e];
for(int i = 0; i < 32; i++){
c3 = caracteres1[i];
for(int o = 0; o < 32; o++){
c4 = caracteres1[o];
for(int u = 0; u < 32; u++){
c5 = caracteres1[u];
for(int A = 0; A < 32; A++){
ContentCarac = c1 + c2 + c3 + c4 + c5 +caracteres1[A];
DBM11.fillTablex(ContentCarac, jlbl_0);
//JOptionPane.showMessageDialog(null,""+ContentCarac,"Message",JOptionPane.INFORMATION_MESSAGE);
ContentCarac = "";
}
}
}
}
}
}
DBM11 = null;
}

public void GenerarDiccionario6_2_1(JLabel jlbl_0){
DBManagementx DBM11 = new DBManagementx();
String ContentCarac = "";
String c1 = "";
String c2 = "";
String c3 = "";
String c4 = "";
String c5 = "";
for(int a = 10; a < 20; a++){
c1 = caracteres1[a];
for(int e = 15; e < 32; e++){
c2 = caracteres1[e];
for(int i = 0; i < 32; i++){
c3 = caracteres1[i];
for(int o = 0; o < 32; o++){
c4 = caracteres1[o];
for(int u = 0; u < 32; u++){
c5 = caracteres1[u];
for(int A = 0; A < 32; A++){
ContentCarac = c1 + c2 + c3 + c4 + c5 +caracteres1[A];
DBM11.fillTablex(ContentCarac, jlbl_0);
//JOptionPane.showMessageDialog(null,""+ContentCarac,"Message",JOptionPane.INFORMATION_MESSAGE);
ContentCarac = "";
}
}
}
}
}
}
DBM11 = null;
}

public void GenerarDiccionario6_3(JLabel jlbl_0){
DBManagementx DBM11 = new DBManagementx();
String ContentCarac = "";
String c1 = "";
String c2 = "";
String c3 = "";
String c4 = "";
String c5 = "";
for(int a = 20; a < 32; a++){
c1 = caracteres1[a];
for(int e = 0; e < 15; e++){
c2 = caracteres1[e];
for(int i = 0; i < 32; i++){
c3 = caracteres1[i];
for(int o = 0; o < 32; o++){
c4 = caracteres1[o];
for(int u = 0; u < 32; u++){
c5 = caracteres1[u];
for(int A = 0; A < 32; A++){
ContentCarac = c1 + c2 + c3 + c4 + c5 +caracteres1[A];
DBM11.fillTablex(ContentCarac, jlbl_0);
//JOptionPane.showMessageDialog(null,""+ContentCarac,"Message",JOptionPane.INFORMATION_MESSAGE);
ContentCarac = "";
}
}
}
}
}
}
DBM11 = null;
}

public void GenerarDiccionario6_3_1(JLabel jlbl_0){
DBManagementx DBM11 = new DBManagementx();
String ContentCarac = "";
String c1 = "";
String c2 = "";
String c3 = "";
String c4 = "";
String c5 = "";
for(int a = 20; a < 32; a++){
c1 = caracteres1[a];
for(int e = 15; e < 32; e++){
c2 = caracteres1[e];
for(int i = 0; i < 32; i++){
c3 = caracteres1[i];
for(int o = 0; o < 32; o++){
c4 = caracteres1[o];
for(int u = 0; u < 32; u++){
c5 = caracteres1[u];
for(int A = 0; A < 32; A++){
ContentCarac = c1 + c2 + c3 + c4 + c5 +caracteres1[A];
DBM11.fillTablex(ContentCarac, jlbl_0);
//JOptionPane.showMessageDialog(null,""+ContentCarac,"Message",JOptionPane.INFORMATION_MESSAGE);
ContentCarac = "";
}
}
}
}
}
}
DBM11 = null;
}
...
...
...
//Ahora se llama a al método fillTable (el nombre del método no importa jejeje). En este método se llama la otro que coteje primero.
public void fillTable(String dato){
if(Cotejar(dato) == 0){
newCodigo();
idpalabra +=1;
String SQL = "INSERT INTO palabras (idpalabras, palabras, sha1, md5) Values ('" + idpalabra + "','" + dato + "', '', '');";
try{
st.executeUpdate(SQL);
}catch(Exception e){
e.printStackTrace();
}
}
}
...
...
...


Y este es el proceso. Lo importante esq se genera un objeto thread por cada bucle, y también para las conexiones. hay muchos bucles es verdad... para generar cadenas de 10 caracteres...

Lo que necesites! Gracias.
#143
Bueno algo más. Cuanto hilos puede ejecutar a la vez¿? Pues para mi ordenador para que la aplicación "aguante" unos cuatro hilos aprox, el gadgets de la CPU con el primer hilo 25%, y así sucesivamente. Cuando digo que la aplicación "aguante" es por que cuanto más hilos pongo a rular en paralelo más fallos se producen al insertar en la BD. Aun q hasta 4 hilos es asequible por que se produce un error de 800 inserciones, teniendo en cuanta que con un solo hilo, no se produce ni un solo error. Para dar algo más de inf.

Saludos!!
#144
Java / Generar palabras de la mejor manera.
31 Marzo 2011, 12:18 PM
Buenas,

Bueno la verdad es que ya he estado haciendo preguntas más o menos sobre el mismo tema del proyecto que me había planteado, y ahora llego a la conclusión de que tengo que abandonarlo. La idea era crear una tabla con todas las palabras posibles, y poner su SHA1 y su MD5. En su momento ya me enfrente a crear todas las posibilidades de palabras y era imposible por el tiempo. Bueno las ideas que se me ocurrieron y que hice.

1.- Como se creaban muchas palabras "inservibles" hice que el programa cogiera libros en .txt, los filtrase para quitar signos, y después guardaba las palabras obtenidas, todas servibles, aun que ya sabemos que una contraseña es compleja frente a una palabra normal. Y más si tenemos una palabra con acento, o con una letra en mayúscula, pero bueno...

2.- Volví a generar palabras aleatoriamente pero con Thread (bueno para ser más exactos cada función de la aplicación se hacía en Thread diferentes). Bueno la cuestión es que aunq empiece a generar por un lado palabras con 10 caracteres y 32 posibilidades en un hilo, y en otro palabras de 9 caracteres con 32 posibilidades los tiempos siguen siendo demasiado... Así que os pongo un ejemplo.

Bueno el bucle normal (para 6 caracteres en la palabra) seria "for(int a = 0; a < 32; a++)" etc... Lo que pense e hice fue el bucle de para 6 caracteres separarlo en 4 bucles, cada uno en thread diferente. Pero aun así es imposible, por que hablamos de millones...

Código (java) [Seleccionar]

public void GenerarDiccionario6_1(JLabel jlbl_0){
DBManagementx DBM11 = new DBManagementx();
String ContentCarac = "";
String c1 = "";
String c2 = "";
String c3 = "";
String c4 = "";
String c5 = "";
for(int a = 0; a < 10; a++){
c1 = caracteres1[a];
for(int e = 0; e < 15; e++){
c2 = caracteres1[e];
for(int i = 0; i < 32; i++){
c3 = caracteres1[i];
for(int o = 0; o < 32; o++){
c4 = caracteres1[o];
for(int u = 0; u < 32; u++){
c5 = caracteres1[u];
for(int A = 0; A < 32; A++){
ContentCarac = c1 + c2 + c3 + c4 + c5 +caracteres1[A];
DBM11.fillTablex(ContentCarac, jlbl_0);
//JOptionPane.showMessageDialog(null,""+ContentCarac,"Message",JOptionPane.INFORMATION_MESSAGE);
ContentCarac = "";
}
}
}
}
}
}
DBM11 = null;
}


Código (java) [Seleccionar]

public void GenerarDiccionario6_1_1(JLabel jlbl_0){
DBManagementx DBM11 = new DBManagementx();
String ContentCarac = "";
String c1 = "";
String c2 = "";
String c3 = "";
String c4 = "";
String c5 = "";
for(int a = 0; a < 10; a++){
c1 = caracteres1[a];
for(int e = 15; e < 32; e++){
c2 = caracteres1[e];
for(int i = 0; i < 32; i++){
c3 = caracteres1[i];
for(int o = 0; o < 32; o++){
c4 = caracteres1[o];
for(int u = 0; u < 32; u++){
c5 = caracteres1[u];
for(int A = 0; A < 32; A++){
ContentCarac = c1 + c2 + c3 + c4 + c5 +caracteres1[A];
DBM11.fillTablex(ContentCarac, jlbl_0);
//JOptionPane.showMessageDialog(null,""+ContentCarac,"Message",JOptionPane.INFORMATION_MESSAGE);
ContentCarac = "";
}
}
}
}
}
}
DBM11 = null;
}


Bueno pues os cuento un poco más. Esto aun así tarda mucho. Lo que se hace: a través de un hilo se ejecuta el bucle va al método donde se guarda en la BD, pero antes se coteja con lo que ya hay guardado en la BD, para que no se dupliquen palabras.

Se os ocurre algo para hacerlo mejor en cualquier sentido.

Muchas gracias y saludos.  :-\

P.D:
32 * 32 = 1024

32 * 32 * 32 = 32.768

32 * 32 * 32 * 32 = 1.048.576

32 * 32 * 32 * 32 * 32 = 33.554.432

32 * 32 * 32 * 32 * 32 * 32 = 1.073.741.824




#145
Java / Re: Ready To Program?
29 Marzo 2011, 02:42 AM
Buenas,

Yo no tengo mucha experiencia en Java todavía, pero si me plantee con que debía de aprender, y fue por prueba y error. El primero netbeans, en su momento era el que utilizaba en clase, y es por el que empece 3 años después XD, lo malo que veo es que te da la facilidad de utilizar los elementos dinamicamente ya que es más comodo, y puestos a aprender mejor programar cuanto más mejor, y entonces seguí con el bloc de notas, estaba bien, pero para aprender es bastante lento, a no se que ya se tenga soltura. Así que acabe en eclipse con el que estoy bastante contento. Cuando toco .Net me quedo impresionado de la diferencia que hay al crear hasta la más simples de las aplicaciones.

Saludos!!!
#146
Java / Re: Busqueda binaria.
28 Marzo 2011, 18:20 PM
Buenas xopito,

estoy pensando si se podría hacer de esa manera, y cual sería mejor. Muchas gracias y saludos!!
#147
Java / Re: Busqueda binaria.
25 Marzo 2011, 22:38 PM
Buenas,

muchas gracias, estoy intentando perder el menor tiempo posible con los thread, el tema de la base de datos como esta ahora para ordenarla va a dar muchos problemas de tiempos, una vez que tenga el algoritmo para ordenar la base alfabéticamente. De todas formas a lo mejor (con el comentario anterior)  se puede solucionar, transpasando los datos de una tabla a otra, pero ordenandolos por medio del método  compareTo(String) y después insertando ordenadamente. A lo mejor eso si puede funcionar... aun que el tiempo será problemático.

Muchas gracias, saludos!!!
#148
Java / Re: Crear un ejecutable con Netbeans
25 Marzo 2011, 22:32 PM
Buenas,

bueno yo no sabía como iba la cosa exactamente con el tema de .exe .jar, pero ahora mejor. Por lo demás el problema que puedes tener a lo mejor esta en el código.

Saludos.
#149
Buenas,   ;D ;D ;D ;D ;D ;D ;D Justo ese era el problema XD!!! Esta mañana cuando me he dado cuenta casi me tiro por la ventana XD. Muchas gracias!!!! :silbar:
#150
Java / Re: Crear un ejecutable con Netbeans
25 Marzo 2011, 00:52 AM
Buenas,

yo también estoy aprendiendo java, y me dejas un poco pillado, yo pensaba que era lo mismo oO jejejej

Saludos.