Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1

    [VB.NET] ContextSwitchDeadLock è stata rilevata

    Ciao a tutti ragazzi...sono nuovo del forum, anche se da molto tempo lo consulto. Vi pongo un quesito al quale non riesco a dare soluzione. Prima però vi spiego cosa deve fare il programma che sto scrivendo:

    Il mio programma deve principalmente cercare, nelle cartelle di rete del mio fileserver (sistema in clustering) determinate tipologie di file, per effettuare controlli sullo stato di occupazione dello storage ma soprattutto (motivo per il quale ho iniziato a scriverlo) deve cercare all'interno delle cartelle di rete dei fastidiosissimi file senza estensione che si formano ogni volta che un utente salva un file in rete, che hanno la stessa dimensione di quello originale e che occupano tantissimo spazio inutile (si genera un file ad ogni salvataggio). Questo programma quindi deve trovare questi file e cancellarli. Ora, il codice che ho scritto funziona benissimo, solo che quando lo faccio cercare in cartelle dove gli elementi subordinati (cartelle figlio) sono tantissime, il programma dopo 60 secondi mi va in timeout e restituisce questo errore:

    "Impossibile eseguire la transizione dal contesto COM 0x12f2500 al contesto COM 0x12f2750 per 60 secondi. Probabilmente il thread a cui appartiene il contesto/apartment di destinazione è impegnato nell'attesa senza distribuzione o nell'elaborazione di un'operazione a esecuzione prolungata che non prevede la distribuzione di messaggi Windows. Questa situazione in genere ha un impatto negativo sulle prestazioni e può causare una mancata risposta dall'applicazione o un accumulo continuato nel tempo dell'utilizzo della memoria. Per evitare questo problema, è necessario che durante le operazioni a esecuzione prolungata tutti i thread in modalità STA (Single Thread Apartment) utilizzino primitive di attesa con distribuzione (ad esempio CoWaitForMultipleHandles) e messaggi distribuiti in base a routine."

    A questo punto mi chiedo cosa posso fare, se aumentare il tempo di timeout (che oltretutto non so come si fa) o...boh, non saprei....

    Ecco il codice (purtroppo non mi formatta bene il codice quindi dovrò allegare un txt):

    www.box32.it/codice.txt

    Copiatelo e incollatelo in una nuova scheda...non capisco perchè il link non funzioni... O_o


    Grazie in anticipo per l'aiuto......
    La costante crescita si attiva solo nel momento del confronto.

  2. #2
    PErchè me lo formatta così male il codice?
    La costante crescita si attiva solo nel momento del confronto.

  3. #3
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Il codice è illegibile cosi.
    Sbagliare è umano, perseverare è diabolico.

  4. #4
    Eh lo so...ma se lo metto tra i tag CODE me lo formatta così...........
    La costante crescita si attiva solo nel momento del confronto.

  5. #5
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    Non sono i Tag, ma come incolli il codice dentro.
    Sbagliare è umano, perseverare è diabolico.

  6. #6
    codice:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
            report = "\Report.txt"
            Timer1.Enabled = True
            testfile = TextBox2.Text & report
            path = TextBox1.Text
    
            Try
    
    
                Using sw As StreamWriter = New StreamWriter(testfile)
                    sw.WriteLine("INIZIO ELENCO FILE TROVATI")
                    sw.WriteLine("-------------------------------------------------------------------------")
                    sw.WriteLine("CARTELLA MADRE:  [" & path & "]   " & "RICERCA FILE ---> " & ComboBox2.Text)
                    sw.WriteLine("-------------------------------------------------------------------------")
                    sw.WriteLine("INIZIO RICERCA ----> " & TimeOfDay)
                    sw.WriteLine("-------------------------------------------------------------------------")
    
                    For Each foundfile As String In My.Computer.FileSystem.GetFiles(path)
    
                        If ComboBox2.Text = "Senza estensione" Then
    
                            punto = "."
    
                            If InStr(foundfile, punto) <= 0 Then
                                ListBox1.Items.Add(foundfile)
    
                                sw.WriteLine(foundfile)
                                i = i + 1
                            End If
    
                        Else
                            If InStr(UCase(foundfile), UCase(ComboBox2.Text)) > 0 Then
                                ListBox1.Items.Add(foundfile)
                                sw.WriteLine(foundfile)
                                i = i + 1
    
                            End If
    
                        End If
    
    
                    Next
    
                    For Each founddirectory As String In My.Computer.FileSystem.GetDirectories(path, FileIO.SearchOption.SearchAllSubDirectories)
    
                        ListBox2.Items.Add(founddirectory)
    
                        For Each foundfile As String In My.Computer.FileSystem.GetFiles(founddirectory)
    
                            If ComboBox2.Text = "Senza estensione" Then
    
                                punto = "."
    
                                If InStr(foundfile, punto) <= 0 Then
                                    ListBox1.Items.Add(foundfile)
                                    sw.WriteLine(foundfile)
                                    i = i + 1
                                End If
    
                            Else
                                If InStr(UCase(foundfile), UCase(ComboBox2.Text)) > 0 Then
                                    ListBox1.Items.Add(foundfile)
                                    sw.WriteLine(foundfile)
                                    i = i + 1
    
                                End If
    
                            End If
    
    
                        Next
    
                    Next
                    sw.WriteLine("-------------------------------------------------------------------------")
                    sw.WriteLine("RICERCA FILES TERMINATA")
                    sw.WriteLine("-------------------------------------------------------------------------")
                    sw.WriteLine("SONO STATI TROVATI " & i & " FILES " & ComboBox2.Text)
                    sw.WriteLine("-------------------------------------------------------------------------")
                    sw.WriteLine("FINE RICERCA ----> " & TimeOfDay)
                    sw.Close()
    
                End Using
    
                If CheckBox1.Checked = True Then
    
    
                    Dim percalleg As String
                    Dim dest As String
    
                    dest = TextBox3.Text
    
                    percalleg = testfile
    
                    Dim Msg As New System.Net.Mail.MailMessage("carlofanuli@rivacold.com", dest, "Log ricerca file", "Questo è un messaggio di prova")
    
                    Dim Smtp As New System.Net.Mail.SmtpClient("mailserver")
    
                    Msg.Attachments.Add(New System.Net.Mail.Attachment(percalleg))
    
                    Smtp.Send(Msg)
    
    
                End If
    
                CheckBox1.Enabled = False
                Button1.Enabled = False
    
            Catch ex As Exception
    
                MsgBox("Errore")
    
            End Try
    
        End Sub
    La costante crescita si attiva solo nel momento del confronto.

  7. #7
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970


    L'eccezione si verifica quando sei in debug o anche avviando l'applicazione nomalmente?
    Sbagliare è umano, perseverare è diabolico.

  8. #8
    Sia in debug che non...
    La costante crescita si attiva solo nel momento del confronto.

  9. #9
    Utente di HTML.it
    Registrato dal
    Apr 2009
    Messaggi
    970
    L'unica cosa che mi possa venire in mente ora riguarda l'istruzione

    codice:
     For Each founddirectory As String In My.Computer.FileSystem.GetDirectories(path, FileIO.SearchOption.SearchAllSubDirectories)
    Secondo me ti conviene fare un ciclo For....Each scansionando ogni cartella e sottocartella.
    Sbagliare è umano, perseverare è diabolico.

  10. #10
    Ma lo fa già... O_o no?
    La costante crescita si attiva solo nel momento del confronto.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.