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

 

 


Tema destacado: Arreglado, de nuevo, el registro del warzone (wargame) de EHN


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP) (Moderador: kub0x)
| | | |-+  [SOLUCIONADO] Mi app tarda demasiado en iniciar
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] 2 Ir Abajo Respuesta Imprimir
Autor Tema: [SOLUCIONADO] Mi app tarda demasiado en iniciar  (Leído 15,426 veces)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
[SOLUCIONADO] Mi app tarda demasiado en iniciar
« en: 4 Enero 2013, 11:53 am »

Hola, necesito ayuda con mi programa que tarda unos 10 seg. en visualizarse el form principal, y se carga antes el notifyicon que el form con unos segundos de diferencia xD  ¿Eso es normal?

Antes tardaba incluso más en cargar, pero he mejorado el tiempo de carga ejecutando el sub importante un nuevo thread.

En el form load solo hago 4 estúpidas compbocaciones y lo importante corre en un thread separado, por eso pienso que no debería tardar tanto en mostrarse el form...

¿Que puede ser?, ¿Ven algo extraño en el form load?

Bueno, voy a intentar dar datos útiles:



Proyecto: Windows form
Form: double buffered
Framework: 4.0
Controles de terceros: un GroupPanel con degradado, un dialogo de carpetas, y una barra de progreso. (La barra de progreso está visible por defecto.)
Recursos que tiene que cargar el exe: 3 dll's que pesan en total 5 MB. están separados, aunque también comparé la velocidad unificandolo con .NET shrink y el resultado es el mismo.
Prefetch de windows: Desactivado (No pienso activarlo para solucionar el problema)


El proyecto entero:
http://www.mediafire.com/?zije2zggdmv669t

Como podeis ver, es una app sencilla, pero aparte de que tarda en iniciarse, me consumía muchos muchos recursos, si no le libero memória como hago en el form antes consumía 40 mb después de iniciarse SIN TOCAR NADA, ni con dispose lo arreglaba, ahora solo consume 4-5 mb, pero digo que eso es extraño...

El form principal:
Código
  1. Public Class Form1
  2.  
  3. #Region "Declarations"
  4.  
  5.    Dim filesystem As Object
  6.    Dim ThisDir As Object
  7.    Dim mcheck(0) As CheckBox
  8.    Dim labelnum = 0
  9.    Public Shared playerargs As String
  10.    Public Shared Temp_file As String = System.IO.Path.GetTempPath & "\PlayDir_tmp.m3u"
  11.  
  12.    ' Checkboxes Thread
  13.    Public checkboxes_thread As System.Threading.Thread = New Threading.Thread(AddressOf updatecheckboxes)
  14.  
  15.    ' Select all Thread
  16.    Public select_all_thread As System.Threading.Thread = New Threading.Thread(AddressOf Select_or_unselect_all)
  17.  
  18.    ' Randomize thread
  19.    Public Thread_is_completed As Boolean = False
  20.    Public Want_to_abort_thread As Boolean = False
  21.    Public Want_to_cancel_thread As Boolean = False
  22.  
  23.    ' Flush memory
  24.    Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal process As IntPtr, ByVal minimumWorkingSetSize As Integer, ByVal maximumWorkingSetSize As Integer) As Integer
  25.  
  26. #End Region
  27.  
  28. #Region "Properties"
  29.  
  30.    'userSelectedPlayerFilePath
  31.    Public Property userSelectedPlayerFilePath() As String
  32.        Get
  33.            Return Textbox_Player.Text
  34.        End Get
  35.        Set(value As String)
  36.            Textbox_Player.Text = value
  37.        End Set
  38.    End Property
  39.  
  40.    ' userSelectedFolderPath
  41.    Public Property userSelectedFolderPath() As String
  42.        Get
  43.            Return Textbox_Folder.Text
  44.        End Get
  45.        Set(value As String)
  46.            Textbox_Folder.Text = value
  47.        End Set
  48.    End Property
  49.  
  50. #End Region
  51.  
  52. #Region "Load / Close"
  53.  
  54.    ' Form load
  55.    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  56.  
  57.        If Not My.Computer.FileSystem.DirectoryExists(My.Settings.folderpath) Then
  58.            My.Settings.folderpath = Nothing
  59.            ProgressBar.Visible = False
  60.            Me.Size = New System.Drawing.Size(Me.Width, 240)
  61.            Panel_Folders.Size = New System.Drawing.Size(0, 0)
  62.            Checkbox_SelectAll.Enabled = False
  63.        Else
  64.            Checkbox_SelectAll.Enabled = True
  65.            Textbox_Folder.Text = My.Settings.folderpath
  66.            ProgressBar.Visible = True
  67.        End If
  68.  
  69.        If Not My.Computer.FileSystem.FileExists(My.Settings.playerpath) Then
  70.            My.Settings.playerpath = Nothing
  71.        Else
  72.            Textbox_Player.Text = My.Settings.playerpath
  73.        End If
  74.  
  75.        If My.Settings.randomize = True Then Checkbox_Randomize.Checked = True
  76.        If My.Settings.autoclose = True Then Checkbox_AutoClose.Checked = True
  77.  
  78.        Updatecheckboxes_Start()
  79.  
  80.        My.Settings.Save()
  81.  
  82.    End Sub
  83.  
  84.    ' Form close
  85.    Private Sub Form1_FormClosing(sender As Object, e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
  86.        Want_to_abort_thread = True
  87.  
  88.        SyncLock thread_1 'ensures all other threads running stop
  89.            thread_1.Abort()
  90.        End SyncLock
  91.  
  92.        If Not My.Settings.folderpath = Nothing Then
  93.            GenerarPropiedades()
  94.        End If
  95.  
  96.        My.Settings.Save()
  97.  
  98.        NotifyIcon1.Visible = False
  99.        NotifyIcon1.Dispose()
  100.  
  101.    End Sub
  102.  
  103. #End Region
  104.  
  105. #Region "Save / Get settings"
  106.  
  107.    ' Generate properties
  108.    Public Sub GenerarPropiedades()
  109.  
  110.        Dim mCheckados(0) As Int32
  111.        Dim Cuantos As Int32 = 0
  112.        Dim empty = Nothing
  113.  
  114.        Try
  115.            For Each c As CheckBox In Panel_Folders.Controls
  116.                empty = False
  117.            Next
  118.  
  119.            If Not empty = False Then
  120.                My.Settings.Valores = Nothing
  121.            Else
  122.                For i As Int32 = 0 To mcheck.Length - 1
  123.                    If mcheck(i).Checked = True Then
  124.                        Cuantos += 1
  125.                        Array.Resize(mCheckados, Cuantos)
  126.                        mCheckados(Cuantos - 1) = i + 1
  127.                    End If
  128.                Next
  129.                My.Settings.Valores = mCheckados
  130.            End If
  131.        Catch
  132.        End Try
  133.  
  134.    End Sub
  135.  
  136.    ' Load properties
  137.    Public Sub CargarPropiedades()
  138.        If My.Settings.Valores IsNot Nothing Then
  139.            For Each indiceCheckado As Int32 In My.Settings.Valores()
  140.                If Not indiceCheckado = 0 Then
  141.                    InvokeControl(mcheck(indiceCheckado - 1), Sub(x) x.Checked = True)
  142.                End If
  143.            Next
  144.        End If
  145.    End Sub
  146.  
  147. #End Region
  148.  
  149. #Region "Checkboxes"
  150.  
  151.    ' Checkbox thread start
  152.    Private Sub Updatecheckboxes_Start()
  153.        checkboxes_thread.Abort()
  154.        checkboxes_thread = New Threading.Thread(AddressOf updatecheckboxes)
  155.        checkboxes_thread.IsBackground = False
  156.        checkboxes_thread.Start()
  157.    End Sub
  158.  
  159.    ' Checkbox thread
  160.    Public Sub updatecheckboxes()
  161.  
  162.        If Not My.Settings.folderpath Is Nothing Then
  163.  
  164.            InvokeControl(Checkbox_SelectAll, Sub(x) x.Enabled = False)
  165.            InvokeControl(Checkbox_SelectAll, Sub(x) x.Checked = False)
  166.            InvokeControl(Button_PLAY, Sub(x) x.Enabled = False)
  167.            InvokeControl(Button_PLAY, Sub(x) x.BackColor = Color.FromArgb(50, 50, 50))
  168.            InvokeControl(Panel_Folders, Sub(x) x.Enabled = False)
  169.            InvokeControl(ProgressBar, Sub(x) x.TextFormat = "Sorting folders, please wait...")
  170.            InvokeControl(ProgressBar, Sub(x) x.TextShow = ProgBar.ProgBarPlus.eTextShow.FormatString)
  171.  
  172.            ' delete the old checkboxes
  173.            InvokeControl(Panel_Folders, Sub(x) x.Controls.Clear())
  174.  
  175.            ' create the new checkboxes
  176.            Dim filesystem = CreateObject("Scripting.FileSystemObject")
  177.            Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath)
  178.            Dim i As Int32 = 0
  179.            Dim pos As Int32 = 5
  180.            For Each folder In ThisDir.Subfolders
  181.                Array.Resize(mcheck, i + 1)
  182.                mcheck(i) = New CheckBox
  183.                With mcheck(i)
  184.                    .BackColor = Color.Transparent
  185.                    .ForeColor = Color.White
  186.                    .AutoSize = False
  187.                    .Size = New Point(338, 20)
  188.                    .Location = New Point(1, pos)
  189.                    .Name = "CheckBox" & i + 1
  190.                    .Text = folder.Name
  191.                    .Cursor = Cursors.Hand
  192.                End With
  193.                InvokeControl(Panel_Folders, Sub(x) x.Controls.Add(mcheck(i)))
  194.                AddHandler mcheck(i).CheckedChanged, AddressOf LlamadaCheckBox
  195.                i += 1
  196.                pos += 20
  197.            Next
  198.  
  199.            ' Load checked checkboxes
  200.            CargarPropiedades()
  201.  
  202.            ' Reset saved checked checkboxes
  203.            My.Settings.Valores = Nothing
  204.  
  205.            InvokeControl(ProgressBar, Sub(x) x.TextShow = ProgBar.ProgBarPlus.eTextShow.None)
  206.            InvokeControl(ProgressBar, Sub(x) x.TextFormat = "Sorting files... {1}% Done")
  207.            InvokeControl(Panel_Folders, Sub(x) x.Enabled = True)
  208.            InvokeControl(Button_PLAY, Sub(x) x.Enabled = True)
  209.            InvokeControl(Button_PLAY, Sub(x) x.BackColor = Color.SteelBlue)
  210.            InvokeControl(Checkbox_SelectAll, Sub(x) x.Enabled = True)
  211.            InvokeControl(Panel_Folders, Sub(x) x.Focus())
  212.  
  213.        End If
  214.  
  215.        FlushMemory("PlayDir")
  216.    End Sub
  217.  
  218.    ' Checkbox events
  219.    Public Sub LlamadaCheckBox(ByVal sender As Object, ByVal e As System.EventArgs)
  220.        Dim filesystem = CreateObject("Scripting.FileSystemObject")
  221.        Dim ThisDir = filesystem.GetFolder(My.Settings.folderpath)
  222.        Dim CheckboxN As CheckBox = CType(sender, CheckBox)
  223.  
  224.        If CheckboxN.Checked = True Then
  225.            labelnum += 1
  226.            playerargs = playerargs & " " & ControlChars.Quote & System.IO.Path.Combine(ThisDir.Path, CheckboxN.Text.ToString()) & ControlChars.Quote
  227.        Else
  228.            labelnum -= 1
  229.            playerargs = Replace(playerargs, " " & ControlChars.Quote & System.IO.Path.Combine(ThisDir.Path, CheckboxN.Text.ToString()) & ControlChars.Quote, "")
  230.        End If
  231.  
  232.        If labelnum < 0 Then
  233.            labelnum = 0
  234.            InvokeControl(Label_SelectedFolders, Sub(x) x.Text = "0 folders selected")
  235.        Else
  236.            InvokeControl(Label_SelectedFolders, Sub(x) x.Text = labelnum & " folders selected")
  237.        End If
  238.  
  239.    End Sub
  240.  
  241. #End Region
  242.  
  243. #Region "Buttons"
  244.  
  245.    ' Folder button
  246.    Public Sub Button_SearchFolder_Click(sender As Object, e As EventArgs) Handles Button_SearchFolder.Click
  247.        Dim folderselect As New Ookii.Dialogs.VistaFolderBrowserDialog
  248.        folderselect.ShowNewFolderButton = True
  249.        If folderselect.ShowDialog.ToString() = "OK" Then
  250.            My.Settings.Valores = Nothing
  251.            labelnum = 0
  252.            Label_SelectedFolders.Text = labelnum & " folders selected"
  253.            userSelectedFolderPath = folderselect.SelectedPath
  254.            My.Settings.folderpath = folderselect.SelectedPath
  255.            My.Settings.Save()
  256.            playerargs = Nothing
  257.            Me.Size = New System.Drawing.Size(400, 550)
  258.            Panel_Folders.Size = New System.Drawing.Size(360, 250)
  259.            ProgressBar.Visible = True
  260.            Updatecheckboxes_Start()
  261.        End If
  262.    End Sub
  263.  
  264.    ' Player button
  265.    Public Sub Button_SearchPlayer_Click(sender As Object, e As EventArgs) Handles Button_SearchPlayer.Click
  266.        Dim playerselected As New OpenFileDialog()
  267.        playerselected.InitialDirectory = Environ("programfiles")
  268.        playerselected.Title = "Select your favorite music player"
  269.        playerselected.Filter = "Music players|bsplayer.exe;mpc.exe;mpc-hc.exe;mpc-hc64.exe;umplayer.exe;vlc.exe;winamp.exe;wmp.exe"
  270.        PlayerDialog.FilterIndex = 1
  271.        Dim selection As System.Windows.Forms.DialogResult = playerselected.ShowDialog()
  272.        If selection = DialogResult.OK Then
  273.            userSelectedPlayerFilePath = playerselected.FileName
  274.            My.Settings.playerpath = playerselected.FileName
  275.            My.Settings.Save()
  276.        End If
  277.        FlushMemory("PlayDir")
  278.    End Sub
  279.  
  280.    ' Refresh button
  281.    Private Sub Button_Refresh_Click(sender As Object, e As EventArgs) Handles Button_Refresh.Click
  282.        labelnum = 0
  283.        Label_SelectedFolders.Text = "0 folders selected"
  284.        Updatecheckboxes_Start()
  285.    End Sub
  286.  
  287.    ' Play button
  288.    Public Sub Button_PLAY_Click(sender As Object, e As EventArgs) Handles Button_PLAY.Click
  289.        Me.Focus()
  290.  
  291.        If Button_PLAY.Tag = "Cancel" Then
  292.            Want_to_cancel_thread = True
  293.            Want_to_abort_thread = True
  294.            While Not Thread_is_completed = True
  295.                Application.DoEvents()
  296.            End While
  297.            ProgressBar.ResetBar()
  298.            ProgressBar.Max = 100
  299.            ProgressBar.Value = 0
  300.        Else
  301.            If Not System.IO.File.Exists(Textbox_Player.Text) Then
  302.                MessageBox.Show("You need to select a music player...", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Error)
  303.            Else
  304.                If Not playerargs = Nothing Then
  305.                    Checkbox_Randomize.Enabled = False
  306.                    Checkbox_SelectAll.Enabled = False
  307.                    Button_PLAY.Image = My.Resources.Cancel_button
  308.                    Button_PLAY.Tag = "Cancel"
  309.                    Button_PLAY.BackColor = Color.Red
  310.                    ProgressBar.Max = 100
  311.                    ProgressBar.TextShow = ProgBar.ProgBarPlus.eTextShow.FormatString
  312.                    If Checkbox_Randomize.Checked = True Then
  313.                        Thread_is_completed = False
  314.                        Dim thread_1 As System.Threading.Thread = New Threading.Thread(AddressOf mithread)
  315.                        thread_1.IsBackground = True
  316.                        thread_1.Start()
  317.                        While Not Thread_is_completed = True
  318.                            Application.DoEvents()
  319.                        End While
  320.                    Else
  321.                        If Not thread_1.ThreadState = Threading.ThreadState.AbortRequested Or Want_to_abort_thread = True Or Want_to_cancel_thread = True Then
  322.                            Process.Start(userSelectedPlayerFilePath, playerargs)
  323.                        End If
  324.                    End If
  325.                    If Checkbox_AutoClose.Checked = True And Not Want_to_cancel_thread = True Then Me.Close()
  326.                Else
  327.                    If Textbox_Player.Text = "Select a music player..." Then MessageBox.Show("You need to select a music player...", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Error)
  328.                    If Textbox_Folder.Text = "Select a folder..." Then MessageBox.Show("You need to open a folder with music files...", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Error)
  329.                    MessageBox.Show("You need to select at least one folder...", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Stop)
  330.                End If
  331.            End If
  332.            Want_to_abort_thread = False
  333.            Want_to_cancel_thread = False
  334.            Button_PLAY.Image = My.Resources.Play
  335.            Button_PLAY.Tag = "Play"
  336.            Button_PLAY.BackColor = Color.SteelBlue
  337.            ProgressBar.TextShow = ProgBar.ProgBarPlus.eTextShow.None
  338.            Panel_Folders.Focus()
  339.            Checkbox_Randomize.Enabled = True
  340.            Checkbox_SelectAll.Enabled = True
  341.            FlushMemory("PlayDir")
  342.        End If
  343.    End Sub
  344.  
  345.    ' Auto-close
  346.    Public Sub Checkbox_AutoClose_CheckedChanged(sender As Object, e As EventArgs) Handles Checkbox_AutoClose.CheckedChanged
  347.        If Checkbox_AutoClose.Checked = True Then
  348.            Picturebox_AutoClose.Visible = True
  349.            My.Settings.autoclose = True
  350.        Else
  351.            Picturebox_AutoClose.Visible = False
  352.            My.Settings.autoclose = False
  353.        End If
  354.        Panel_Folders.Focus()
  355.        My.Settings.Save()
  356.    End Sub
  357.  
  358.    ' Randomize
  359.    Public Sub Checkbox_Randomize_CheckedChanged(sender As Object, e As EventArgs) Handles Checkbox_Randomize.CheckedChanged
  360.        If Checkbox_Randomize.Checked = True Then
  361.            Picturebox_Randomize.Visible = True
  362.            My.Settings.randomize = True
  363.        Else
  364.            Picturebox_Randomize.Visible = False
  365.            My.Settings.randomize = False
  366.        End If
  367.        Panel_Folders.Focus()
  368.        My.Settings.Save()
  369.    End Sub
  370.  
  371.    ' Select  ALL checkboxes
  372.    Public Sub Checkbox_SelectAll_CheckedChanged(sender As Object, e As EventArgs) Handles Checkbox_SelectAll.CheckedChanged
  373.        select_all_thread.Abort()
  374.        select_all_thread = New Threading.Thread(AddressOf Select_or_unselect_all)
  375.        select_all_thread.IsBackground = True
  376.        select_all_thread.Start()
  377.        Panel_Folders.Focus()
  378.    End Sub
  379.  
  380.    Private Sub Select_or_unselect_all()
  381.        CheckForIllegalCrossThreadCalls = False
  382.        If Checkbox_SelectAll.Checked = False Then
  383.  
  384.            InvokeControl(Picturebox_SelectAll, Sub(x) x.Visible = False)
  385.            InvokeControl(Checkbox_SelectAll, Sub(x) x.Text = "Select all")
  386.  
  387.            For Each ControlName In Panel_Folders.Controls
  388.                ControlName.Checked = False
  389.            Next
  390.  
  391.        Else
  392.  
  393.            InvokeControl(Picturebox_SelectAll, Sub(x) x.Visible = True)
  394.            InvokeControl(Checkbox_SelectAll, Sub(x) x.Text = "Select none")
  395.  
  396.            For Each ControlName In Panel_Folders.Controls
  397.                ControlName.Checked = True
  398.            Next
  399.  
  400.        End If
  401.        CheckForIllegalCrossThreadCalls = True
  402.        FlushMemory("PlayDir")
  403.    End Sub
  404.  
  405. #End Region
  406.  
  407. #Region "Drag & Drop"
  408.  
  409.    Private Sub Textboxes_DragDrop(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Textbox_Folder.DragDrop, Panel_Folders.DragDrop
  410.        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
  411.            Dim Objetos As String() = e.Data.GetData(DataFormats.FileDrop)
  412.            Dim attributes = Objetos(0)
  413.            If System.IO.Directory.Exists(attributes) Then
  414.                Textbox_Folder.Text = Objetos(0)
  415.                userSelectedFolderPath = Objetos(0)
  416.                My.Settings.folderpath = Objetos(0)
  417.                My.Settings.Save()
  418.                playerargs = Nothing
  419.                Me.Size = New System.Drawing.Size(400, 540)
  420.                Panel_Folders.Size = New System.Drawing.Size(360, 250)
  421.                labelnum = 0
  422.                Label_SelectedFolders.Text = "0 folders selected"
  423.                Updatecheckboxes_Start()
  424.            Else
  425.                MessageBox.Show("Invalid directory!", "PlayDir", MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
  426.            End If
  427.        End If
  428.    End Sub
  429.  
  430.    Private Sub Textboxes_DragEnter(ByVal sender As Object, ByVal e As System.Windows.Forms.DragEventArgs) Handles Textbox_Folder.DragEnter, Panel_Folders.DragEnter
  431.        If e.Data.GetDataPresent(DataFormats.FileDrop) Then
  432.            e.Effect = DragDropEffects.All
  433.        End If
  434.    End Sub
  435.  
  436. #End Region
  437.  
  438. #Region " Notify icon "
  439.  
  440.    ' Form resize
  441.    Private Sub Form1_Resize(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Resize
  442.        If Me.WindowState = FormWindowState.Minimized Then
  443.            Me.WindowState = FormWindowState.Normal
  444.            Me.Hide()
  445.        End If
  446.        FlushMemory("PlayDir")
  447.    End Sub
  448.  
  449.    ' Double click
  450.    Private Sub NotifyIcon1_MouseDoubleClick(sender As Object, e As MouseEventArgs) Handles NotifyIcon1.MouseDoubleClick
  451.        If Me.Visible = True Then
  452.            Me.Hide()
  453.        Else
  454.            Me.Show()
  455.        End If
  456.        FlushMemory("PlayDir")
  457.    End Sub
  458.  
  459.    ' right click
  460.    Private Sub NotifyIcon1_MouseClick(ByVal sender As Object, ByVal e As System.Windows.Forms.MouseEventArgs) Handles NotifyIcon1.MouseClick
  461.        If e.Button = MouseButtons.Right Then NotifyIcon1.ContextMenuStrip.Show()
  462.        FlushMemory("PlayDir")
  463.    End Sub
  464.  
  465.    ' Mostrar
  466.    Private Sub MostrarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles ContextMenuStrip1.Click
  467.        Me.Show()
  468.        FlushMemory("PlayDir")
  469.    End Sub
  470.  
  471.    ' Ocultar
  472.    Private Sub OcultarToolStripMenuItem_Click(sender As Object, e As EventArgs) Handles Ocultar.Click
  473.        Me.Hide()
  474.        FlushMemory("PlayDir")
  475.    End Sub
  476.  
  477.    ' Salir
  478.    Private Sub SalirToolStripMenuItem1_Click(sender As Object, e As EventArgs) Handles Salir.Click
  479.        Me.Close()
  480.    End Sub
  481.  
  482. #End Region
  483.  
  484. #Region " Tooltip events "
  485.  
  486.    Private Sub SuperTooltip_TooltipClosed(sender As Object, e As EventArgs) Handles SuperTooltip1.TooltipClosed
  487.        FlushMemory("PlayDir")
  488.    End Sub
  489.  
  490. #End Region
  491.  
  492. #Region " Randomize Thread "
  493.  
  494.    Public thread_1 As System.Threading.Thread = New Threading.Thread(AddressOf mithread)
  495.  
  496.    Public Sub mithread()
  497.  
  498.        Dim Str As String
  499.        Dim Pattern As String = ControlChars.Quote
  500.        Dim ArgsArray() As String
  501.        Str = Replace(playerargs, " " & ControlChars.Quote, "")
  502.        ArgsArray = Split(Str, Pattern)
  503.        Using objWriter As New System.IO.StreamWriter(Temp_file, False, System.Text.Encoding.UTF8)
  504.            Dim n As Integer = 0
  505.            Dim count As Integer = 0
  506.            Dim foldercount As Integer = -1
  507.  
  508.            For Each folder In ArgsArray
  509.                foldercount += 1
  510.                If foldercount > 1 Then
  511.                    InvokeControl(ProgressBar, Sub(x) x.Max = foldercount)
  512.                End If
  513.            Next
  514.  
  515.            If foldercount = 1 Then
  516.                For Each folder In ArgsArray
  517.                    If Not folder = Nothing Then
  518.                        Dim di As New IO.DirectoryInfo(folder)
  519.                        Dim files As IO.FileInfo() = di.GetFiles("*")
  520.                        Dim file As IO.FileInfo
  521.                        InvokeControl(ProgressBar, Sub(x) x.Max = files.Count)
  522.                        For Each file In files
  523.                            If Want_to_abort_thread = False And Want_to_cancel_thread = False Then
  524.                                n += 1
  525.                                CheckPrimeNumber(n)
  526.                                count += 1
  527.                                If file.Extension.ToLower = ".lnk" Then
  528.                                    Dim ShotcutTarget As String = Shortcut.ResolveShortcut((file.FullName).ToString())
  529.                                    objWriter.Write(ShotcutTarget & vbCrLf)
  530.                                Else
  531.                                    objWriter.Write(file.FullName & vbCrLf)
  532.                                End If
  533.                            Else
  534.                                Exit For
  535.                            End If
  536.                        Next
  537.                    End If
  538.                Next
  539.  
  540.            ElseIf foldercount > 1 Then
  541.                For Each folder In ArgsArray
  542.                    If Not folder = Nothing Then
  543.                        Dim di As New IO.DirectoryInfo(folder)
  544.                        Dim files As IO.FileInfo() = di.GetFiles("*")
  545.                        Dim file As IO.FileInfo
  546.                        For Each file In files
  547.                            If Want_to_abort_thread = False And Want_to_cancel_thread = False Then
  548.                                If file.Extension.ToLower = ".lnk" Then
  549.                                    Dim ShotcutTarget As String = Shortcut.ResolveShortcut((file.FullName).ToString())
  550.                                    objWriter.Write(ShotcutTarget & vbCrLf)
  551.                                Else
  552.                                    objWriter.Write(file.FullName & vbCrLf)
  553.                                End If
  554.                            Else
  555.                                Exit For
  556.                            End If
  557.                        Next
  558.                    End If
  559.                    InvokeControl(ProgressBar, Sub(x) x.Value += 1)
  560.                Next
  561.            End If
  562.        End Using
  563.  
  564.        If Not thread_1.ThreadState = Threading.ThreadState.AbortRequested And Not Want_to_abort_thread = True And Not Want_to_cancel_thread = True Then
  565.            Randomize_a_file.RandomizeFile(Temp_file)
  566.            InvokeControl(ProgressBar, Sub(x) x.Value = 0)
  567.            Try
  568.                Process.Start(userSelectedPlayerFilePath, ControlChars.Quote & Temp_file.ToString() & ControlChars.Quote)
  569.            Catch
  570.            End Try
  571.        End If
  572.        Thread_is_completed = True
  573.    End Sub
  574.  
  575. #End Region
  576.  
  577. #Region " Check prime number function "
  578.    Private Sub CheckPrimeNumber(ByVal number As Integer)
  579.        Dim IsPrime As Boolean = True
  580.        For i = 2 To number / 2
  581.            If (number Mod i = 0) Then
  582.                IsPrime = False
  583.                Exit For
  584.            End If
  585.        Next i
  586.        If IsPrime = True Then
  587.            InvokeControl(ProgressBar, Sub(x) x.Value = number)
  588.        End If
  589.    End Sub
  590. #End Region
  591.  
  592. #Region " InvokeControl "
  593.  
  594.    Public Sub InvokeControl(Of T As Control)(ByVal Control As T, ByVal Action As Action(Of T))
  595.        If Not Want_to_abort_thread = True Then
  596.            Try
  597.                If Control.InvokeRequired Then
  598.                    Control.Invoke(New Action(Of T, Action(Of T))(AddressOf InvokeControl), New Object() {Control, Action})
  599.                Else
  600.                    Action(Control)
  601.                End If
  602.            Catch
  603.            End Try
  604.        End If
  605.    End Sub
  606. #End Region
  607.  
  608. #Region "Flush memory"
  609.  
  610.    Public Sub FlushMemory(process_to_flush)
  611.        Try
  612.            GC.Collect()
  613.            GC.WaitForPendingFinalizers()
  614.            If (Environment.OSVersion.Platform = PlatformID.Win32NT) Then
  615.                SetProcessWorkingSetSize(Process.GetCurrentProcess().Handle, -1, -1)
  616.                Dim myProcesses As Process() = Process.GetProcessesByName(process_to_flush)
  617.                Dim myProcess As Process
  618.                For Each myProcess In myProcesses
  619.                    SetProcessWorkingSetSize(myProcess.Handle, -1, -1)
  620.                Next myProcess
  621.            End If
  622.        Catch
  623.        End Try
  624.    End Sub
  625.  
  626. #End Region
  627.  
  628. End Class
  629.  
  630.  
  631.  


« Última modificación: 10 Enero 2013, 01:13 am por EleKtro H@cker » En línea



spiritdead

Desconectado Desconectado

Mensajes: 296


Ver Perfil
Re: Mi app tarda demasiado en iniciar
« Respuesta #1 en: 4 Enero 2013, 12:01 pm »

no he terminado de leerlo, pero puedo decir

para ser 1 simple aplicacion veo un uso excesivo de threads,y codigo .... no me imagino en 1 proyecto de mas de 30mil lineas :S

aver si le echo 1 ojo

siempre digo, los programadores no terminan de quemar la etapa del "hola mundo" por asi decirlo, cuando ya quieren ir a lo complejo, y terminan creando aplicaciones mal diseñadas....

prueba en la linea 79 poner me.refresh, estoy seguro q no muestra el form, debido a las tareas del thread, posiblemente ya que el hilo esta siendo ejecutado en el preload del form...
(no he revisado el codigo fue simplemente viendolo por encima)

PORFAVOR
  ' Flush memory
   Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal process As IntPtr, ByVal minimumWorkingSetSize As Integer, ByVal maximumWorkingSetSize As Integer) As Integer
 
no uses API sin saber su verdadero USO.

esta api es la encargada de liberar la ram usada y mandarla al disco duro, no la "libera" para eso esta el GC del framework que se encarga de la administracion de los recursos.

al usar dicha api 2-3 veces reduciras el rendimiento del software un 50-75% ya que debe hacer uso del discoduro para leer

tienes un verdadero desastre en esta funcion
updatecheckboxes....

haces invoke en 1 therad hijo ? god...

uno en HILO llama a una funcion delegada que el delegado hace un Invokerequired
pero.... joder

otra cosa.. consumes 40-50mb DEBIDO a que carga parcialmente o completamente algunos modulos del Framework...

recuerdalo VBNET/c# es 1 lenguaje administrado por el framework :)


« Última modificación: 4 Enero 2013, 12:20 pm por spiritdead » En línea

Facilitador De Tareas - Task Simplifier (FDT)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Mi app tarda demasiado en iniciar
« Respuesta #2 en: 4 Enero 2013, 12:31 pm »

Gracias por comentar

para ser 1 simple aplicacion veo un uso excesivo de threads,y codigo .... no me imagino en 1 proyecto de mas de 30mil lineas :S

Entonces quizás no séa tán simple,

Uso un hilo para dibujar los checkboxes en el panel
Otro hilo para la casilla de "select all" (Para marcar/desmarcar todos los checkboxes)
Y otro hilo para el botón azúl de "play", para randomizar los archivos cuando la opción está activada.

Necesito usar los 3 threads símplemente para que no se cuelgue el form mientras se procesa esas cosas, creo que he hecho lo más correcto, lo erróneo habría sido dejar que el form se cuelgue mientras trabaja, vaya... si hay otra forma de hacerlo sin threads no sé hacerlo pero podrías decirme.





Citar
prueba en la linea 79 poner me.refresh, estoy seguro q no muestra el form, debido a las tareas del thread, posiblemente ya que el hilo esta siendo ejecutado en el preload del form...
(no he revisado el codigo fue simplemente viendolo por encima)
Eso antes no era un thread, la aplicación tardaba en iniciarse más como he comentado, lo puse en un thread y ahora tarda 1-2 segundos menos.

He probado con el me.refresh justo debajo de llamar a ese thread como me has dicho, no lo ha solucionado  :-\.




Citar
PORFAVOR
  ' Flush memory
   Declare Function SetProcessWorkingSetSize Lib "kernel32.dll" (ByVal process As IntPtr, ByVal minimumWorkingSetSize As Integer, ByVal maximumWorkingSetSize As Integer) As Integer
 
no uses API sin saber su verdadero USO.

No puedo decir que séa mentira lo que dices porque efectívamente no tengo idea de lo que hace la función de esa API, ví el snippet, leí muy buenos comentarios acerca del snippet, y lo usé,

pero lo que si puedo afirmar es que he monitorizado la aplicación, la app no crea ni "dumpea" memória por así decirlo en ningún archivo del disco duro cuando uso la función de esa API[/b][/i],

además el rendimiento no disminuye nada (Al menos en esta app) mejora complétamente, y se nota consideráblemente, el proceso de randomizado aumenta de velocidad en más de un 50%, y es por hacer uso de esa API, hice muchos tests estos días comparando velocidad y estoy seguro de esto que digo.





Citar
haces invoke en 1 therad hijo ? god...
Perdona que vuelva a discrepar, pero no sé cual es el error que dices que he cometido en ese thread,
si no uso los delegados en ese thread, manda el típico error de "cross-thread operation", por eso invoco los controles.


PD: Como puedes ver no hago las cosas a lo loco.


Un saludo!
« Última modificación: 4 Enero 2013, 12:36 pm por EleKtro H@cker » En línea



spiritdead

Desconectado Desconectado

Mensajes: 296


Ver Perfil
Re: Mi app tarda demasiado en iniciar
« Respuesta #3 en: 4 Enero 2013, 12:50 pm »

Gracias por comentar

Entonces quizás no séa tán simple,

Uso un hilo para dibujar los checkboxes en el panel
Otro hilo para la casilla de "select all" (Para marcar/desmarcar todos los checkboxes)
Y otro hilo para el botón azúl de "play", para randomizar los archivos cuando la opción está activada.

Necesito usar los 3 threads símplemente para que no se cuelgue el form mientras se procesa esas cosas, creo que he hecho lo más correcto, lo erróneo habría sido dejar que el form se cuelgue mientras trabaja, vaya... si hay otra forma de hacerlo sin threads no sé hacerlo pero podrías decirme.




Eso antes no era un thread, la aplicación tardaba en iniciarse más como he comentado, lo puse en un thread y ahora tarda 1-2 segundos menos.

He probado con el me.refresh justo debajo de llamar a ese thread como me has dicho, no lo ha solucionado  :-\.




No puedo decir que séa mentira lo que dices porque efectívamente no tengo idea de lo que hace la función de esa API, ví el snippet, leí muy buenos comentarios acerca del snippet, y lo usé,

pero lo que si puedo afirmar es que he monitorizado la aplicación, la app no crea ni "dumpea" memória por así decirlo en ningún archivo del disco duro cuando uso la función de esa API[/b][/i],

además el rendimiento no disminuye nada (Al menos en esta app) mejora complétamente, y se nota consideráblemente, el proceso de randomizado aumenta de velocidad en más de un 50%, y es por hacer uso de esa API, hice muchos tests estos días comparando velocidad y estoy seguro de esto que digo.




Perdona que vuelva a discrepar, pero no sé cual es el error que dices que he cometido en ese thread,
si no uso los delegados en ese thread, manda el típico error de "cross-thread operation", por eso invoco los controles.


PD: Como puedes ver no hago las cosas a lo loco.


Un saludo!

nose para q pierdo el tiempo pero bueno.

en otro post te dije la forma correcta y te puse 1 ejemplo de delegados

en 1 hilo siempre se hace

'dentro del hilo
SetLabelText(parametro1,parametro2)
'fuera del hilo

seria asi mas o menos

Código
  1. Delegate Sub SetLabelT(ByVal objeto As Object, ByVal texto As String)
  2.  
  3. Private Sub SetLabelText(ByVal objeto As Object, ByVal texto As String)
  4.        If CType(objeto,Label).InvokeRequired Then
  5.            Dim d As New SetLabelT(AddressOf SetLabelText)
  6.            Me.Invoke(d, New Object() {objeto, texto})
  7.        Else
  8.            CType(objeto, Label).Text = texto
  9.        End If
  10.    End Sub

esa seria 1 FORMA GENERICA de un delegado para todos los label q requieran dicha funcion

lo del me.refresh fue fallo mio, despues lei bien y la instruccion anterior no era del hilo era 1 funcion meramente

Citar
No puedo decir que séa mentira lo que dices porque efectívamente no tengo idea de lo que hace la función de esa API, ví el snippet, leí muy buenos comentarios acerca del snippet, y lo usé,

me das la razon, NO LEES! y pones por poner codigo, eso es lo q me molesta!

si no te documentas, esto es lo q pasa, 300 post en el foro...

1 ejemplo de niños.

no te has dado cuenta q cuando una aplicacion consume ram excesivamente, el resto de las aplicaciones "pesan menos" si le ves desde el task maanger ?

eso es debido a que van haciendo resize del ram, para evitar 1 desbordamiento, q da como resultado
pareciera q la memoria nunca se acaba
PERO hace tu pc 50% mas lenta, debido a q toma sectores del disco como memoria ram adicional (virtual)

« Última modificación: 4 Enero 2013, 12:56 pm por spiritdead » En línea

Facilitador De Tareas - Task Simplifier (FDT)
seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Mi app tarda demasiado en iniciar
« Respuesta #4 en: 4 Enero 2013, 13:57 pm »

esto es algo que lo tendrias que solucionar vos mismo, porque es facil saber que es lo que esta causando esto.

es super facil darse cuenta que es lo que esta tardando, si sabes poner puntos de interrupcion en el codigo lo tendrias que saber, simplemente comenta la linea que comienza el thread, si la ejecutas y abre normal entonces lo que tarda es ese thread. anda comentando lineas esa es la forma de darse cuenta en 1 minuto que es lo que tarda.

y mi opinion es que toda esa porqueria del GDI+(no lo digo por tu proyecto sino en general el GDI depende como lo manejes es lento) es lo que tarda en dibujarse, todo es una suma de cosas que van poniendo lento, y si aparte usas degradado y le dibujas arriba y controles de terceros que hay que cargarlos a la memoria es mas lento todavia va a ser, es asi. si embebes 3 dll de 5 megas es casi una locura diria yo ya que el tamaño del .exe se va por las nubes.

tenes que ir linea por linea viendo que e lo que tarda no hay otra.

y no esta bien usar el collect del garbage collector, pues es una forma de limpiar algo que esta funcionando mal, el mismo .net ya se encarga de eso no tendrias que llamarlo, y si consume mucho es por la cantidad de cosas que dije antes.
« Última modificación: 4 Enero 2013, 13:59 pm por seba123neo » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: Mi app tarda demasiado en iniciar
« Respuesta #5 en: 10 Enero 2013, 01:13 am »

Definitívamente lo que está causando que la APP tarde 10 segundos en cargar son los controles del "DotNetBar", serán controles muy buenos y todo lo que quieras (spiritdead), pero son pesadísimos a la hora de cargar, no creo que valga la pena usarlos para que luego séa incómodo abrir la APP, y eso que solo uso 2 groupboxes y un panel... no me imagino si usase más controles de esa suite.

En otra aplicación que estoy haciendo, nada más cargar la aplicación dibuja +20 botones con 1 imagen en cada botón, 4 picturebox, 1 listview, 1 textbox, el executable está comprimido, además de cargar +250 recursos de texto al inicio, pues no me tarda ni 1,5 segundos en cargarse la APP, claro, porque no he usado krypton ni DotNetBar esta vez.

Un saludo!
« Última modificación: 10 Enero 2013, 01:18 am por EleKtro H@cker » En línea



spiritdead

Desconectado Desconectado

Mensajes: 296


Ver Perfil
Re: Mi app tarda demasiado en iniciar
« Respuesta #6 en: 10 Enero 2013, 01:19 am »

Definitívamente lo que está causando que la APP tarde 10 segundos en cargar son los controles del "DotNetBar", serán controles muy buenos y todo lo que quieras (spiritdead), pero son pesadísimos a la hora de cargar, no creo que valga la pena usarlos para que luego séa incómodo abrir la APP, y eso que solo uso 2 groupboxes y un panel... no me imagino si usase más controles de esa suite.

En otra aplicación que estoy haciendo, nada más cargar la aplicación dibuja +20 botones con 1 imagen en cada botón, 4 picturebox, 1 listview, 1 textbox, el executable está comprimido, además de cargar +250 recursos de texto al inicio, pues no me tarda ni 1,5 segundos en cargarse la APP, claro, porque no he usado krypton ni DotNetBar esta vez.

Un saludo!

yo use fue krypton :P q cargan en 1-2 segs
En línea

Facilitador De Tareas - Task Simplifier (FDT)
seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: Mi app tarda demasiado en iniciar
« Respuesta #7 en: 10 Enero 2013, 01:37 am »

Definitívamente lo que está causando que la APP tarde 10 segundos en cargar son los controles del "DotNetBar"

es asi, los controles de terceros (esos packs de varios controles sobre todo), son lindos y todo, pero asi le cuestan a la aplicacion, las hacen mas lenta y te lo puedo asegurar ya que a mi tambien me encanta dejar la interfaz perfecta con iconos lindos y demas, soy capas de perder solo un dia para decidirme solo que icono ponerle.  >:D

yo en una aplicacion use un pack de 60 controles gratis que daba la empresa DevExpress (es una de las mejores junto a la krypton de componentfactory), use una grilla, unos datapicker y unos frames, que paso la aplicacion funcionaba bien, pero veia que era algo lenta al cargar y no era fluida como una pantalla sin esos controles, a la aplicacion le cuesta un monton dibujar esos controles y te lo puedo demostrar con una aplicacion que muestra los objetos gdi en memoria.

entonces me decidi por hacerlos con controles comunes del visual studio y vuela, los saque a la ***** a esos controles, son lindos y todo, hasta el label que traia era pesado, y eso que yo puse pocos controles no me imagino con muchos, tienen miles de propiedades pero son pesados y te puedo asegurtar que no valen la pena, aparte de que tenes que llevar esas librerias, y si la llegas a embeber dentro del .exe te aumentan como 15 megas de tamaño, una total locura.

lo que hay que hacer es la aplicacion linda, pero lo mas rapido posible, no meterle 80 controles y para colmo todos externos eso lo pone re lento, ni hacer esas cosaas de tranparecia y despues para colmo dibujarle arriba, eso le "cuesta".

lo unico que uso externo por ahora es el objectlistview, que es una grilla irremplazable y rapidisima y el mejor control para .NET que he visto, y solo pesa 300 kb.

esa es mi opinion y consejo, que trates de no dibujar tantas cosas en un formulario, se puede hacer linda una pantalla con solo iconos de 16x16 y sin dibujar ningun degradado y con los mismo controles de .NET

saludos.
En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.885



Ver Perfil
Re: [SOLUCIONADO] Mi app tarda demasiado en iniciar
« Respuesta #8 en: 10 Enero 2013, 01:44 am »

Hombre, pero también he descubierto que los controles de terceros por así decirlo..."gratis", por ejemplo los que hay en CodeProject, como el objectlistview, más de uno son buenisímos y no les cuesta nada cargar, claro, solo pesan unos pocos KB en lugar de los muchos MB que pesan los controles DE PAGO, y las muchas más diferencias (que desconozco) que tienen los de pago que los hacen tán pesados.

Ahora encontré un panel degradado gratis, no tarda nada en cargar, está muy bien, aquí lo dejo por si alguien lo necesita :)

GradientPanel.vb

Código
  1. Imports System
  2. Imports System.Collections.Generic
  3. Imports System.ComponentModel
  4. Imports System.Data
  5. Imports System.Drawing
  6. Imports System.Drawing.Drawing2D
  7. Imports System.Text
  8. Imports System.Windows.Forms
  9.  
  10. Namespace GradientPanel
  11. Public Partial Class GradientPanel
  12. Inherits System.Windows.Forms.Panel
  13.  
  14. ' member variables
  15. Private mStartColor As System.Drawing.Color
  16. Private mEndColor As System.Drawing.Color
  17.  
  18. Public Sub New()
  19. ' InitializeComponent()
  20. PaintGradient()
  21. End Sub
  22.  
  23. Protected Overrides Sub OnPaint(pe As PaintEventArgs)
  24. ' TODO: Add custom paint code here
  25.  
  26. ' Calling the base class OnPaint
  27. MyBase.OnPaint(pe)
  28. End Sub
  29.  
  30.  
  31. Public Property PageStartColor() As System.Drawing.Color
  32. Get
  33. Return mStartColor
  34. End Get
  35. Set
  36. mStartColor = value
  37. PaintGradient()
  38. End Set
  39. End Property
  40.  
  41.  
  42. Public Property PageEndColor() As System.Drawing.Color
  43. Get
  44. Return mEndColor
  45. End Get
  46. Set
  47. mEndColor = value
  48. PaintGradient()
  49. End Set
  50. End Property
  51.  
  52.  
  53. Private Sub PaintGradient()
  54. Dim gradBrush As System.Drawing.Drawing2D.LinearGradientBrush
  55. gradBrush = New System.Drawing.Drawing2D.LinearGradientBrush(New Point(0, 0), New Point(Me.Width, Me.Height), PageStartColor, PageEndColor)
  56.  
  57. Dim bmp As New Bitmap(Me.Width, Me.Height)
  58.  
  59. Dim g As Graphics = Graphics.FromImage(bmp)
  60. g.FillRectangle(gradBrush, New Rectangle(0, 0, Me.Width, Me.Height))
  61. Me.BackgroundImage = bmp
  62. Me.BackgroundImageLayout = ImageLayout.Stretch
  63. End Sub
  64.  
  65. End Class
  66. End Namespace

En línea



seba123neo


Desconectado Desconectado

Mensajes: 3.621



Ver Perfil WWW
Re: [SOLUCIONADO] Mi app tarda demasiado en iniciar
« Respuesta #9 en: 10 Enero 2013, 01:54 am »

si, los controles realizados asi que heredan (Inherits), son controles rapidos, pues lo unico que estas haciendo es usar el mismo control de .NET y le estas modificando sus metodos para hacer lo que uno quiera, a mi tambien me gustan ese tipo de controles, pero la verdad no se porque son tan pesados esos packs de controles de esas empresas, y para colmo hay que pagar, ni en pedo pago para que me haga mas lenta la aplicacion  :xD

yo antes tenia este orden de prioridad:

INTERFAZ LINDA - APLICACION RAPIDA

despues cambie a

APLICACION RAPIDA - INTERFAZ LINDA

ya que me encanta primero buscar que las cosas funcionen lo mas rapido posible, luego ver los procesos que tardan mas y si hay posibilidad de optimizarlos. y mientras menos dependencias mejor, que solo sea el .exe y nada mas.
« Última modificación: 10 Enero 2013, 01:58 am por seba123neo » En línea

Páginas: [1] 2 Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Portatil ASUS tarda en iniciar
Hardware
helejagy 7 5,085 Último mensaje 24 Octubre 2014, 07:00 am
por Randomize
subir y optimizar imagenes tarda demasiado
PHP
gAb1 0 2,340 Último mensaje 7 Mayo 2016, 21:50 pm
por gAb1
PC TARDA DEMASIADO EN ARRANCAR Y SE PETA
Hardware
LuisCardenas123 3 3,181 Último mensaje 7 Julio 2019, 23:58 pm
por nightcode
MOVIDO: PC TARDA DEMASIADO EN ARRANCAR Y SE PETA
Software
MCKSys Argentina 0 1,815 Último mensaje 6 Julio 2019, 16:12 pm
por MCKSys Argentina
Me tarda el portátil al iniciar sección es un Hp Probook 6560b « 1 2 »
Windows
El_Andaluz 12 8,516 Último mensaje 11 Diciembre 2019, 00:37 am
por El_Andaluz
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines