none
Consumo de Memória RRS feed

  • Pergunta

  • Prezados, bom dia.

    Criei o código abaixo para realizar uma pesquisa e listar em um arquivo texto todos os arquivos que estão armazenados em um HD. Minha finalidade e listar diariamente os arquivos que possuo armazenado no servidor para fazer umas comparações.

    O código funciona perfeitamente, contudo, notei que minha aplicação inicia com um consumo de memória em torno de 1 MB e quando termina está em torno de 300 MB (claro que ele listou mais de 500.000 arquivos).

    Existe algum código que eu possa acrescentar para que quando terminar de listar os arquivos ele "retorne" para o consumo de memória inicial? Caso possua poderiam me mostrar?

    Desde já agradeço a atenção.

    Imports System.IO

    Dim PastaServidor As String = txtDiretorio.Text

            'Verifica se o diretorio digitado existe.
            If Not System.IO.Directory.Exists(PastaServidor) Then
                lblMensagem.Text = "O diretório especificado não pode ser encontrado."
                PastaServidor = Nothing
                Exit Sub
            End If
            'Verifica se o arquivo LogListaArquivo existe.
            If IO.File.Exists("C:\LogListaArquivo-" & Format(DateTime.Now, "ddMMyyyy") & ".txt") = True Then IO.File.Delete("C:\LogListaArquivo-" & Format(DateTime.Now, "ddMMyyyy") & ".txt")
            'Cria o arquivo LogListaArquivo
            Dim LogListaArquivo = New IO.StreamWriter("C:\LogListaArquivo-" & Format(DateTime.Now, "ddMMyyyy") & ".txt", False, System.Text.Encoding.Default)

            '---------------------------------------------
            'Verifica os arquivos existentes na pasta Raiz
            '---------------------------------------------
            Dim DirDiretorio As DirectoryInfo = New DirectoryInfo(PastaServidor)
            Dim oFileInfoCollection() As FileInfo
            Dim oFileInfo As FileInfo
            Dim i As Integer

            'Preenche o FileCollection com um Array de objetos FileInfo
            oFileInfoCollection = DirDiretorio.GetFiles("*.*")
            'Podemos utilizar os objetos da coleção oFileCollection para preencher um ListBox por exemplo
            For i = 0 To oFileInfoCollection.Length() - 1
                oFileInfo = oFileInfoCollection.GetValue(i)
                'Gravando a informacao no arquivo texto. (log ListaArquivo declarado como variável Public
                LogListaArquivo.WriteLine(oFileInfo.Name)
            Next
            DirDiretorio = Nothing
            oFileInfoCollection = Nothing
            oFileInfo = Nothing
            i = Nothing


            '---------------------------------------------
            'Verifica os arquivos existentes na Sub-pasta 
            '---------------------------------------------
            Dim strRootPath As String = PastaServidor
            Dim filePattern As String = "*.*"

            Try
                Dim FullDir() As String = IO.Directory.GetDirectories(strRootPath)
                For Each Dir As String In FullDir
                    Try
                        Dim FullFiles() As String = IO.Directory.GetFiles(Dir, filePattern, IO.SearchOption.AllDirectories)
                        For Each File As String In FullFiles
                            Try
                                'Gravando a informacao no arquivo texto. (log ListaArquivo declarado como variável Public
                                LogListaArquivo.WriteLine(File)
                   

            Catch ex As Exception
                            End Try
                        Next
                        FullFiles = Nothing
                    Catch ex As Exception

                    End Try
                Next
                FullDir = Nothing
            Catch ex As Exception
                MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Exclamation)
            End Try
            strRootPath = Nothing
            filePattern = Nothing

            LogListaArquivo.Close()
            LogListaArquivo = Nothing


        End Sub


    Carlos Falcao

    quarta-feira, 19 de fevereiro de 2014 11:23

Respostas

  • Olá,

    Sempre que for postar código aqui no fórum use a ferramenta Inserir bloco de código.

    Para melhorar um pouco o consumo de memória adicione o código abaixo no final do seu método:

    GC.Collect()
    GC.WaitForPendingFinalizers()

    Classe GC (System)


    Herbert Lausmann

    • Marcado como Resposta Carlos Falcao quarta-feira, 19 de fevereiro de 2014 14:13
    quarta-feira, 19 de fevereiro de 2014 12:14

Todas as Respostas

  • Olá,

    Sempre que for postar código aqui no fórum use a ferramenta Inserir bloco de código.

    Para melhorar um pouco o consumo de memória adicione o código abaixo no final do seu método:

    GC.Collect()
    GC.WaitForPendingFinalizers()

    Classe GC (System)


    Herbert Lausmann

    • Marcado como Resposta Carlos Falcao quarta-feira, 19 de fevereiro de 2014 14:13
    quarta-feira, 19 de fevereiro de 2014 12:14
  • Herbert, bom dia.

    Obrigado pela ajuda. Funcionou perfeitamente.

    Abraços,


    Carlos Falcao

    quarta-feira, 19 de fevereiro de 2014 14:21