elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado:


  Mostrar Mensajes
Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 1017
131  Programación / Programación General / Re: ¿Que tipo de VPS seleccionar para ejecutar 100 hilos? en: 29 Julio 2017, 11:57
ejecutar una aplicación que tiene una lista de cuentas de usuario un total de 100 o más, ahora necesito que se ejecuten simultáneamente las 100 y realice sus peticiones y tareas necesarias

Eso no es una buena idea.

Crear tal cantidad como 100 threads provocará una gran demanda de interrupción en la ejecución de cada thread activo por core en la CPU (thread swaping) en el programador de threads del sistema operativo. Dependiendo de lo intensivas que sean esas "peticiones y tareas necesarias" que has mencionado, esto que acabo de mencionar puede ser algo insignificante, o por lo contrario un problema de gravedad a tomarse en cuenta con su debida seriedad.

Por lo general no te conviene en absoluto crear 100 threads, sino más bien crear unos pocos threads (4, 8, 16) y dividir el trabajo entre ellos. De esta manera, 1 thread trabajará sobre más de un elemento distinto (lista de cuenta de usuario), optimizando el trabajo y realizando un uso más eficiente y escalable de los recursos del sistema.



1. Los hilos o thread que consumen RAM o procesador o las dos ???
1- consumen ambos, los recursos son exigidos para cada hilo individualmente

Hay que tener en cuenta que en los lenguajes de alto nivel (abstractos) como VB.NET y C# ( o más bien dicho .NET Framework ) se optimiza el uso de los threads, pues lo que un programador suele llamar thread o hilo, es en realidad un wrapper de alto nivel que abstrae cierta funcionalidad de un thread del sistema. A raíz de esto hay toda una extensa serie de implementaciones abstractas en la librería de clases de .NET Framework para cubrir, administrar y perfeccionar muchos aspectos relacionados con el uso/rendimiento de los threads, empezando por la implementación de un gestionador de threads (un Thread Pool y un Task Scheduler). El compilador de .NET genera ciertas optimizaciones automáticas en las instrucciones designadas al uso de threads, y los runtimes junto al programador de threads del S.O. se encargan de procesarlas y hacer el resto.

Respecto al consumo, los threads de una aplicación .NET comparten el mismo espacio de memoria de la aplicación (como es evidente, pues un thread no es un proceso independiente de la aplicación, sino un subset del proceso padre, como un subset de subprocesos), y siempre que puedan éstos compartirán y consumirán los recursos de otros threads del proceso por así decirlo de forma comprensible. Es decir, que no estrictamente siempre se deberá asignar un espacio extra/adicional para administrar los recursos de un nuevo thread (aparte del tamaño de la pila o call stack que eso sí siempre es independiente en cada thread), el GarbageCollector de .NET determinará lo que se puede aprovechar/compartir/reciclar con otro thread, y lo que se debe destruir pro completo. En general, llegar a comprender de forma fidedigna como .NET administra los recursos de memoria asignados en una aplicación es bastante (muy) complejo y confuso, o al menos a mi me resulta así ...en comparación con otros.



2. Que debo tener en cuenta para seleccionar el VPS que tenga más RAM o un mejor procesador.
2- depende del programa, puede consumir más ram o procesador según el caso

3. Cuanto creen que necesite de RAM o de procesador para que funcione bien.
3- depende del programa, nadie sabe cuanto consume ni en que sistema corre... de entrada te digo que minimo 1gb de ram para levantar el sistema operativo apropiadamente

Equilibrio, así de simple. Ante la duda, siempre se debe buscar un sistema equilibrado para intentar minimizar las consecuencias de un posible impacto negativo en un factor (CPU) o en el otro (RAM).

Evidentemente en este tipo de escenario multihilo, cuantos más cores y núcleos por core es mejor, y a más RAM será todavía mucho mejor.

También se debe tener en cuenta que tipo de actividad realizarán tus threads y tu aplicación en general (ej. cargar montones de imagenes de alta resolución en un buffer de memoria, o realizar operaciones masivas I/O de escritura o lectura en disco con 1000 archivos de forma simultanea) y como de intensiva será dicha actividad. Eso no podemos saberlo nosotros, tú eres el desarrollador de tu código y por el momento no nos has mostrado NADA del código como para poder orientarte... aunque de todas formas y para ser sincero yo sobre servidores privados de máquinas virtuales apenas sé nada xD.



4. Se puede dañar un PC si se ejecutar muchísimos hilos unos 500 al tiempo?? que podría pasar???

4- no, no se daña... es como afirmar que una pc se daña al abrir muchos programas al mismo tiempo... si son muchos hilos el sistema operativo los organizará en la tabla de prioridades y se procesarán poco a poco... eso si, poco a poco puede ser 0.01 segundo por proceso por nucleo, así que siendo por ejemplo 8 nucleos, serían unos 0.6 segudos para procesar y cerrar todas las peticiones... si no tienes suficiente potencia el sistema operativo se puedes quedar pegado... en ese caso el vps lo detectará y reiniciará

eso como aclaratoria que depende mucho del sistema

Poco más puedo aportar a la respuesta del copañero @Engel Lex. Como ya te han dicho: no se "daña", y los efectos observables serían exactamente los mismos que si te pones a iniciar 100 procesos distintos al mismo tiempo: una sobrecarga de recursos que tendrá como consecuencia una ralentización del sistema operativo.

Pero cabría destacar que .NET Framework se encarga de buscar el equilibrio perfecto de una aplicación multihilo, determinando de forma automática la cantidad mímina y máxima de threads que pueden estar iniciados en paralelo al mismo tiempo por dicha aplicación. Esto se decide en base a muchos factores, así que un colapso de recursos en el S.O. es más bien improbable al ser teoricamente imposible de suceder por si solo (a menos que modificases de forma arbitraria los límites de threads mínimos y máximos por defecto en la aplicación).



(use esta librería para ejecutarlas https://github.com/amibar/SmartThreadPool

En mi opinión haces mal al usar una reimplementación de algo que no sea la implementación original de Microsoft, a eso se le llama REINVENTAR LA RUEDA !!. Otra cosa bien distinta sería utilizar una librería que extienda la implementación original para añadirle funcionalidades adicionales, que sinceramente no sé si será el caso, pero por lo poco que he leido en esa página de CodeProject... no parece ser el caso.

Si te fijas bien, verás que ese proyecto lleva en desarrollo desde el año 2003, esto viene a ser el mismo año en el que se utilizaba .NET Framework 1.0, es en ese año cuando nació ese proyecto de CodeProject, y puede que por aquél entonces si que valiese la pena utilizar una implementación de terceros del thread pool de .NET Framework, ya que simplemente era la versión 1.0 del producto y había muchas cosas que pulir, pero hoy en dia francamente ese tipo de librerías las veo algo de lo más innecesario y sin mucha utilidad real (pues quien la use solo la usará por simple desconocimiento de como llevar a cabo la misma tarea de forma "nativa" o guiada mediante el instrumental que provee .NET Framework ), además solo conseguirías obtener justo lo opuesto a ese rendimiento óptimo que estás buscando...

En .NET Framework, la cantidad máxima de threads administrados que puedes mantener activos (por defecto) se determina en base a muchos factores, podemos abreviar todos estos factores como un conjunto de recursos (RAM) y disponibilidad de cores en CPU. El máximo límite de threads que puedes iniciar de forma simultanea se ve incrementado en cada versión de .NET Framework. Te puedo decir que el límite es de 1023 threads administrados en .NET Framework 4.0, y 2047 en .NET Framework 4.6, ojo, eso solamente en aplicaciones de 32 Bits, ya que este número se ve multiplicado por 16 para una aplicación de 64-Bits, siendo así un límite máximo de 32.767 threads en el thread pool de .NET Framework 4.6 x64. Luego existe un límite de threads de operaciones I/O, cuyo valor no varia y siempre son 1.000 (pero también lo puedes modificar). De todas formas estamos hablando de números/límites muy altos que probablemente nunca podrán ser revasados por una aplicación "normal", y de intentarlo posría provocar un desbordmiento (overflow) de la pila o stack de la aplicación.

Otro motivo por el cual me resulta innecesaria esa reimplementación...que te la "venden" como si fuese la única posibilidad de poder asignar un límite mínimo de threads activos de forma simultanea, es que la librería de clases de .NET Framework proporciona miembros para modificar tanto el límite mínimo como el máximo de threads en tu aplicación (aunque por otro lado esto no limita la cantidad mínima ni máxima de threads dedicados en la aplicación): System.Threading.ThreadPool.SetMinThreads() y System.Threading.ThreadPool.SetMaxThreads(), y además provee varias alternativas de hacer "lo mismo", por orden de abstracción de un thread del sistema: la clase Thread, BackgroundWorker, y Task, cada una de ellas enfocada a distintos escenarios (thread dedicado, thread que necesite interactuar con los controles de la UI, thread 'fire and forget', etc).

¿Todavía sigues creyendo que necesitas recurrir a una librería de terceros para poder ejecutar 100 threads de forma simultanea en una aplicación .NET?, no, en absoluto, y como ya digo... solamente conseguirías desaprovechar los beneficios de la implementación de Microsoft, no obtendrías ese rendimiento óptimo que buscas.

En mi opinión, para lo que pretendes hacer creo que te serviría de mucho usar la clase ThreadPool de .NET. Mientras que la creación y ejecución de un thread administrado (clase: System.Threading.Thread) puede resultar una operación expensiva para el S.O., la clase ThreadPool rehusa los threads y amortigua esos costes adicionales de creación y ejecución. Además, dicha clase ayuda a simpliicar el procedimiento de creación, ejecución y detención/aborto de los threads.

Aquí te muestro un ejemplo de como utilizar el Thread Pool de .NET para mantener 100 threads activos (como mínimo) de forma simultanea:

VB.NET
Código
  1. Imports System
  2. Imports System.Diagnostics
  3. Imports System.Threading
  4.  
  5. Public Module Module1
  6.  
  7.    <MTAThread>
  8.    Public Sub Main()
  9.  
  10.        Dim minThreadCount As Integer = 100
  11.        Dim maxThreadCount As Integer
  12.        Dim minIOThreadCount As Integer
  13.        Dim maxIOThreadCount As Integer
  14.  
  15.        ThreadPool.GetMinThreads(Nothing, minIOThreadCount)
  16.        ThreadPool.GetMaxThreads(maxThreadCount, maxIOThreadCount)
  17.        If (maxThreadCount <= minThreadCount) Then
  18.            maxThreadCount = (minThreadCount + 1)
  19.        End If
  20.  
  21.        ThreadPool.SetMinThreads(minThreadCount, minIOThreadCount)
  22.        ThreadPool.SetMaxThreads(maxThreadCount, maxIOThreadCount)
  23.  
  24.        Debug.WriteLine("Minimum Thread Count: {0}", minThreadCount)
  25.        Debug.WriteLine("Maximum Thread Count: {0}", maxThreadCount)
  26.  
  27.        For i As Integer = 0 To Byte.MaxValue ' Loop trough 0 to 255
  28.            Dim wcb As New WaitCallback(AddressOf MyThreadWork)
  29.            ThreadPool.QueueUserWorkItem(wcb, Nothing)
  30.        Next i
  31.        Thread.Sleep(TimeSpan.FromSeconds(1))
  32.  
  33.        Dim activeThreadCount As Integer = Process.GetCurrentProcess().Threads.Count
  34.        Debug.WriteLine("Amount of active threads: {0}", activeThreadCount)
  35.        Console.ReadKey()
  36.        Environment.Exit(0)
  37.  
  38.    End Sub
  39.  
  40.     ' <MethodImpl(MethodImplOptions.Synchronized)>
  41.    Private Sub MyThreadWork(ByVal stateInfo As Object)
  42.        Thread.Sleep(Timeout.Infinite)
  43.    End Sub
  44.  
  45. End Module

C#
Código
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading;
  4.  
  5. namespace ConsoleApp1 {
  6.  
  7.    class Program {
  8.  
  9.        [MTAThread()]
  10.        static void Main(string[] args) {
  11.  
  12.            int minThreadCount = 100;
  13.            int maxThreadCount = 0;
  14.            int minIOThreadCount = 0;
  15.            int maxIOThreadCount = 0;
  16.  
  17.            ThreadPool.GetMinThreads(out int nul, out minIOThreadCount);
  18.            ThreadPool.GetMaxThreads(out maxThreadCount, out maxIOThreadCount);
  19.            if (maxThreadCount <= minThreadCount) {
  20.                maxThreadCount = (minThreadCount + 1);
  21.            }
  22.  
  23.            ThreadPool.SetMinThreads(minThreadCount, minIOThreadCount);
  24.            ThreadPool.SetMaxThreads(maxThreadCount, maxIOThreadCount);
  25.  
  26.            Debug.WriteLine("Minimum Thread Count: {0}", minThreadCount);
  27.            Debug.WriteLine("Maximum Thread Count: {0}", maxThreadCount);
  28.  
  29.            for (int i = 0; i <= byte.MaxValue; i++) { // Loop trough 0 to 255
  30.                WaitCallback wcb = new WaitCallback(MyThreadWork);
  31.                ThreadPool.QueueUserWorkItem(wcb, null);
  32.            }
  33.            Thread.Sleep(TimeSpan.FromSeconds(1));
  34.  
  35.            int activeThreadCount = Process.GetCurrentProcess().Threads.Count;
  36.            Debug.WriteLine("Amount of active threads: {0}", activeThreadCount);
  37.            Console.ReadKey();
  38.            Environment.Exit(0);
  39.  
  40.        }
  41.  
  42.        // [MethodImpl(MethodImplOptions.Synchronized)]
  43.        static void MyThreadWork(object stateInfo) {
  44.            Thread.Sleep(Timeout.Infinite);
  45.        }
  46.    }
  47. }

También puedes hacer uso del paralelismo para iniciar una determinada cantidad de tareas en paralelo (léase: threads) de forma simultanea (en base a los límites actuales establecidos en el thread pool de .NET):

VB.NET:
Código
  1. Imports System
  2. Imports System.Diagnostics
  3. Imports System.Threading
  4. Imports System.Threading.Tasks
  5.  
  6. Public Module Module1
  7.  
  8.    <MTAThread>
  9.    Public Sub Main()
  10.  
  11.        Dim minThreadCount As Integer = 100
  12.        Dim maxThreadCount As Integer
  13.        Dim minIOThreadCount As Integer
  14.        Dim maxIOThreadCount As Integer
  15.  
  16.        ThreadPool.GetMinThreads(Nothing, minIOThreadCount)
  17.        ThreadPool.GetMaxThreads(maxThreadCount, maxIOThreadCount)
  18.        If (maxThreadCount <= minThreadCount) Then
  19.            maxThreadCount = (minThreadCount + 1)
  20.        End If
  21.  
  22.        ThreadPool.SetMinThreads(minThreadCount, minIOThreadCount)
  23.        ThreadPool.SetMaxThreads(maxThreadCount, maxIOThreadCount)
  24.  
  25.        Dim options As New ParallelOptions() With {
  26.            .CancellationToken = CancellationToken.None,
  27.            .TaskScheduler = TaskScheduler.Current,
  28.            .MaxDegreeOfParallelism = minThreadCount
  29.        }
  30.  
  31.        Dim action As New Action(Of Integer, ParallelLoopState)(AddressOf MyThreadWork)
  32.  
  33.        Parallel.For(0, Byte.MaxValue, options, action) ' Loop trough 0 to 255
  34.  
  35.        Console.ReadKey()
  36.        Environment.Exit(0)
  37.  
  38.    End Sub
  39.  
  40.    ' <MethodImpl(MethodImplOptions.Synchronized)>
  41.    Private Sub MyThreadWork(ByVal i As Integer, state As ParallelLoopState)
  42.        Static flag As Boolean = False
  43.        Dim activeThreadCount As Integer = Process.GetCurrentProcess().Threads.Count
  44.        If (activeThreadCount >= 100) AndAlso Not (flag) Then
  45.            flag = Not flag
  46.            Debug.WriteLine("Amount of active threads: {0}", activeThreadCount)
  47.        End If
  48.        Thread.Sleep(Timeout.Infinite)
  49.    End Sub
  50.  
  51. End Module

C#
Código
  1. using System;
  2. using System.Diagnostics;
  3. using System.Threading;
  4. using System.Threading.Tasks;
  5.  
  6. namespace ConsoleApp1 {
  7.  
  8.    class Program {
  9.  
  10.        [MTAThread()]
  11.        static void Main(string[] args) {
  12.  
  13.            int minThreadCount = 100;
  14.            int maxThreadCount = 0;
  15.            int minIOThreadCount = 0;
  16.            int maxIOThreadCount = 0;
  17.  
  18.            ThreadPool.GetMinThreads(out int nul, out minIOThreadCount);
  19.            ThreadPool.GetMaxThreads(out maxThreadCount, out maxIOThreadCount);
  20.            if (maxThreadCount <= minThreadCount) {
  21.                maxThreadCount = (minThreadCount + 1);
  22.            }
  23.  
  24.            ThreadPool.SetMinThreads(minThreadCount, minIOThreadCount);
  25.            ThreadPool.SetMaxThreads(maxThreadCount, maxIOThreadCount);
  26.  
  27.            Debug.WriteLine("Minimum Thread Count: {0}", minThreadCount);
  28.            Debug.WriteLine("Maximum Thread Count: {0}", maxThreadCount);
  29.  
  30.            ParallelOptions options = new ParallelOptions {
  31.                CancellationToken = CancellationToken.None,
  32.                TaskScheduler = TaskScheduler.Current,
  33.                MaxDegreeOfParallelism = minThreadCount
  34.            };
  35.  
  36.            Action<int, ParallelLoopState> action = new Action<int, ParallelLoopState>(MyThreadWork);
  37.  
  38.            Parallel.For(0, byte.MaxValue, options, action); // Loop trough 0 to 255
  39.  
  40.            Console.ReadKey();
  41.            Environment.Exit(0);
  42.  
  43.        }
  44.  
  45.        static bool flag = false;
  46.        // [MethodImpl(MethodImplOptions.Synchronized)]
  47.        static void MyThreadWork(int i, ParallelLoopState state) {
  48.            int activeThreadCount = Process.GetCurrentProcess().Threads.Count;
  49.            if ((activeThreadCount >= 100) && !(flag)) {
  50.                flag = !flag;
  51.                Debug.WriteLine("Amount of active threads: {0}", activeThreadCount);
  52.            }
  53.            Thread.Sleep(Timeout.Infinite);
  54.        }
  55.    }
  56. }



Estaba pensando en usar Wine para que me salga barato el VPS, realizare varias pruebas para ver como se comporta :D

Hace muuuchos años que no manejo de forma seria Linux ni Wine; las cosas habrán cambiado mucho desde aquél entonces, se supone que ahora Wine permite instalar .NET Framework y hasta la versión 4.6 nada menos, pero lo cierto es que si tu intención es instalar Wine para poder ejecutar esa aplicación desarrollada en VB.NET... entonces NO NECESITAS USAR WINE. Además de por si la idea de usar un pseudo-emulador para solucionar el problema no debería ser tu primera opción.

...¿Y entonces cómo hacerlo?, pues bien, para empezar te hago saber que tienes a tu disposición una implementación de terceros de .NET Framework multiplataforma llamada Mono, que es capaz de correr aplicaciones desarrolladas para la plataforma .NET Framework en Linux. No es estrictamente necesario desarrollar la aplicación con la IDE Mono Develop (pero si recomendable para no cometer errores de compatibilidad), puedes desarrollar la aplicación de forma normal con Visual Studio, ya que las librerías de los runtimes de Mono solo se necesitan para iniciar la aplicación.

Y mucho mejor que Mono tienes una opción más óptima a tu disposición: desde hace unos pocos años Microsoft provee una implementación reducida y multiplataforma de .NET Framework llamada .NET Core, que al igual que Mono nos permite crear aplicaciones para Linux, con todos los beneficios y optimizaciones que ello implica por la garantia Made In Microsoft .

En fin, espero que algo de todo lo que expliqué te haya podido servir de ayuda.

Saludos!
132  Foros Generales / Foro Libre / Re: China obliga a ciudadanos musulmanes a instalar spyware en sus cellphones en: 28 Julio 2017, 22:24
China es, pese a que muchos quieran mirar al tendido una dictadura

Pues igual que España, EEUU y todos los paises practicamente, solo que la gran mayoría de ellos (incluyendo a España) son dictaduras disfrazadas de democracia, y no son tan duras ni evidentes como la de Corea del Norte por ejemplo. Nosotros vivimos en un sistema de gobierno representativo, que lamentablemente no es lo mismo que una DEMOCRACIA REAL, ya que lo primero es sinónimo de control, sumisión y manipulación a favor de unos pocos (representantes políticos, jefes de multinacionales, etc) y en contra del resto de la sociedad, y lo segundo, la democracia, sería LIBERTAD.

Unos videos por aquí:

 

Saludos...
133  Foros Generales / Dudas Generales / Re: Code nessus en: 28 Julio 2017, 19:46
Cierro el tema. Estoy harto de ver gente que le da por mencionar algo como si todos los demás seres humanos del planeta tengan que saber de que narices está hablando esa persona, y solo consiguen crear confusión entre los usuarios y los miembros del staff (ya lo ven).

Aprendan a formular una duda de forma PRESENTABLE, como una persona con un mínimo de decencia, teniendo un mínimo de consideración por los demás explicando que es eso de lo que hablan ("Nessus" en este caso).

Saludos!
134  Foros Generales / Foro Libre / Re: China obliga a ciudadanos musulmanes a instalar spyware en sus cellphones en: 28 Julio 2017, 14:25
Los 21 millones de residentes de la provincia autónoma de Xinjiang puede que tengan que instalar una aplicación espía que monitoriza sus conversaciones, fotos, vídeos y localización de forma constante

Y luego nos burlamos de esos "locos" que se atreven a mencionar las palabras prohibidas: New World Order

Controlar a la gente, sus acciones, sus pensamientos, y limitar su privacidad e intimidad. Esa es la tiranía de la 'Big Data'.

...Ya nos "reiremos" todos cuando empiecen a implantarnos microchips de seguimiento dentro de la piel, primero de forma opcional, al cabo de unos años se vovlerá una ley obligatoria, y despues de 10 años todo el mundo se acostumbrará y lo verá como algo normal, sobre todo los niños que nazcan despues de esa ley, creerán que es lo más normal del mundo, y quien no se ponga un chip será "un criminal" a ojos de esa futura sociedad putrefacta.
Siempre ha sido así con los cambios/leyes que no gustan demasiado. El ser humano es tan... comformista y adiestrable.
135  Programación / Scripting / Re: Descargar imagen de una 'URI' en: 28 Julio 2017, 14:10
Te han intentado aclarar repetidamente que eso no es una URL, sino la imagen (de forma literal, eso es la imagen), son los bytes de la imagen codificados en el formato BASE-64. ¿Lo entiendes?. Te han pasado un artículo de la Wikipedia, y dices que aprender no te molesta, pues deberías leerlo...



Asi que les pido por favor si alguien me da una mano, no importa el lenguaje

Ejemplos de como decodificar una cadena de texto BASE-64:

VB.NET:
Código
  1. Imports System.Drawing
  2. Imports System.IO
  3.  
  4. Dim content As String = "data:image/png;base64,"
  5. Dim base64 As String = content & "R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=="
  6. Dim raw As Byte() = Convert.FromBase64String(base64.Replace(content, ""))
  7.  
  8. Using ms As New MemoryStream(raw, writable:=False),
  9.      img As Image = Image.FromStream(ms, useEmbeddedColorManagement:=True, validateImageData:=True)
  10.  
  11.    img.Save("C:\file.png", img.RawFormat)
  12. End Using

C#:
Código
  1. using System.Drawing;
  2. using System.IO;
  3.  
  4. string content = "data:image/png;base64,";
  5. string base64 = content + "R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw==";
  6. byte[] raw = Convert.FromBase64String(base64.Replace(content, ""));
  7.  
  8. using (MemoryStream ms = new MemoryStream(raw, writable: false)) {
  9. using (Image img = Image.FromStream(ms, useEmbeddedColorManagement: true, validateImageData: true)) {
  10. img.Save(@"C:\file.png", img.RawFormat);
  11. }
  12. }

PowerShell:
Código
  1. [void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms")
  2.  
  3. [String]$content = "data:image/png;base64,"
  4. [String]$base64  = $content + "R0lGODlhAQABAIAAAAAAAAAAACH5BAAAAAAALAAAAAABAAEAAAICTAEAOw=="
  5. [Byte[]]$raw     = [Convert]::FromBase64String($base64.Replace($content, ""))
  6.  
  7. [IO.MemoryStream]$ms = New-Object IO.MemoryStream @($raw, $false)
  8. [Drawing.Image]$img = [Drawing.Image]::FromStream($ms, $true, $true)
  9.  
  10. $img.Save("C:\file.png", $img.RawFormat)
  11.  
  12. Exit(0)

Saludos!
136  Programación / .NET / Re: Listar archivos de 2 ficheros en: 28 Julio 2017, 12:22
Hola.

Como norma general, debes asegurarte de liberar los recursos de las instancias de clases que implementen la interfáz IDisposable:
Código
  1. Dim OpenFolderDialog As New FolderBrowserDialog
  2. Dim OpenFolderDialog2 As New FolderBrowserDialog
No te cuesta nada hacer una llamada a FolderBrowserDialog.Dispose() cuando ya no necesites usar el objeto.

Y estas variables que declaras para instanciar objetos COM de Office:
Citar
Código
  1. Dim xlapp
  2. Dim xllibro
  3. Dim xlhoja
...Debes liberarlos mediante los miembros de la clase System.Runtime.InteropServices.Marshal ( Marshal.FinalReleaseComObject() ) para liberar los recursos no administrados.

Además de eso, las variables en VB.NET deben declararse proporcionando un tipo explícito (en C# no es necesario, todas las variables tienen asignación implícita de tipos ). Estás ignorando por completo la sentencia Option Strict produciendo así un código ininteligible, y en fin, eso que haces es un muy mal hábito de programación.
Deberías escribir arriba en la cabecera de tu clase: Option Strict On e ir arreglando los fallos que te irán saliendo en ese código.

En general todo el código que has mostrado está estructurado de forma ineficiente (por ejemplo la nomenclatura del método "leer_pdf_y_crear_excel", y que además éste cumpla dos funciones distintas en una sola), pero lo más grave es que no te responsabilizas en absoluto de los recursos (consumo de memoria RAM de tu aplicación). Debes leer más sobre ello y pulir la administración de recursos sobre todo.

Esos son algunos de mis consejos varios.



Respondiendo a tu pregunta principal:

Código
  1.        ficheroscarpeta = System.IO.Directory.GetFiles(path)
  2.        ficheroscarpeta2 = System.IO.Directory.GetFiles(path2)
  3.  
  4.        For Each fichero As String In ficheroscarpeta
  5.            listbox1. = fichero
  6.            xlhoja.cells(i, 1) = fichero
  7.            i += 1
  8.        Next
  9.  
  10.        For Each fichero As String In ficheroscarpeta2
  11.            xlhoja.cells(i, 1) = fichero
  12.            i += 1
  13.        Next

Solución:

...O en su defecto:

Ejemplo:
Código
  1. Dim files As IEnumerable(Of FileInfo) = New DirectoryInfo("C:\Directory\").EnumerateFiles("*", SearchOption.TopDirectoryOnly)
  2.  
  3. For Each fi As FileInfo In files
  4.    Debug.WriteLine(fi.Name)
  5. Next fi

Saludos
137  Foros Generales / Noticias / Re: ¿Por qué baja la cuota de mercado de Firefox? ¿Puede competir con Chrome? en: 28 Julio 2017, 09:47
Si yo quisiera usar Chrome, instalaría Chrome.. pero como me parece una mi3rda muy pesada, no lo hago. Y si usando Firefox, se empeñan en que sea la misma mi3rda que odias, pués al final conseguirán que en efecto, abandones Firefox y busques otro navegador.

Amén.
138  Foros Generales / Foro Libre / Re: Qué canción estás escuchando ahora ? en: 27 Julio 2017, 18:21
Cita de: Randomize
V For Vendetta

Gran película activista de culto...

Venga, te la voy a dejar a nivel de parbularios:



PD: Esto ya se está empezando a parecer al thread de las palabras encadenadas sin ningún sentido xD. Mejor hagamos tregua si?. ;)

Saludos!
139  Foros Generales / Foro Libre / Re: Qué canción estás escuchando ahora ? en: 27 Julio 2017, 18:05
Temita de rock recién salido del horno y en 360º


140  Foros Generales / Foro Libre / Re: Qué canción estás escuchando ahora ? en: 27 Julio 2017, 17:52
Y con esta joya musical y nostálgica, considérate derrotado... por goleada.

Páginas: 1 2 3 4 5 6 7 8 9 10 11 12 13 [14] 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 ... 1017
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines