Newsgroup: it.comp.lang.visual-basic
Titolo: chiusura file lenta

Ciao a tutti,
a qualcuno è mai capitato di vedere che l'istruzione
"Close #NumNomeFile" ci metta 5 secondi a chiudere un file?
Non capita sempre, ma a volte,
quando accedo ad un file per scrivere, ci mette un casino di tempo
per chiuderlo (bloccando l'interfaccia e mandando l'utilizzo della CPU al
100%).
Il problema è che spesso devo una volta al secondo "loggare su file"
dei messaggi e rendere disponibile il file... ma se ci mette tutto sto
tempo col ca... che è disponibile.
Perchè con Vc non mai avuto sti problemi?
Devo fare un com che si occupi solo di scrivere dei file di log?

 dei file di log?
Non mi pare proprio il caso!
Ti allego una procedura di log per gli errori:
------------------------------------------------------------
Private Sub LogError(ByVal msg As String)
    Dim fn As Integer
    On Error GoTo LogError_Error
    fn = FreeFile
    Open App.Path & "\error.log" For Append As #fn
    Print #fn, Format$(Now, "yyyymmdd|hh:mm:ss|") & msg
LogError_Error:
    Close #fn
End Sub
------------------------------------------------------------
Da utilizzare con una gestione degli errori con etichette di
questo tipo:
------------------------------------------------------------
Private Sub [NomeRoutine]()
    On Error GoTo [NomeRoutine]_Error
    'Codice della Routine
    Exit Sub
[NomeRoutine]_Error:
    LogError Err.Number & "|" & _
             Err.Description & "|" & _
             "[NomeRoutine]" & "|" & _
             "[NomeModulo]"
End Sub
------------------------------------------------------------
hth,
Lokar
-- 
Sito Comune: 
http://www.it-lang-vb.net/
Manifesto: 
http://www.it-lang-vb.net/docs/Manifesto.txt
Statuto: 
http://www.it-lang-vb.net/docs/Statuto.txt
UGIdotNET - 
http://www.ugidotnet.org

 ha scritto nel messaggio
news:bcprdo$m8cn1$1...@ID-158338.news.dfncis.de...


 di tempo.
la butto lì: non è che quando scrivi su disco in realtà scrivi su una cache
(dovrebbe essere una impostazione del so) e la scrittura effettiva avviene
solo quando chiudi?
Quanto/dove scrivi?
Salutoni
Sergio

 successiva dopo un bel po di tempo.
Il quoting di grazia! Si risponde *sotto* al testo citato,
eliminando tutte le parti del messaggio inutili (saluti,
intestazioni, firme) o alle quali non si risponde!
Per quanto riguarda la chiusura del file lenta, ancora non
mi hai risposto:
In che modo apri il file?
In che modo scrivi sul file?


 In che modo scrivi sul file?
Si, capisco che la dicitura "praticamente identica alla mia" nn sia
completa...
allora la riporto.
Private Sub WriteToLogFile(s As String)
On Error GoTo err_msg
    Dim NomeFile As String
    Dim OutFile As String
    Dim FileNum As Integer
    NomeFile = Format(Now, "yyyymmdd")
    OutFile = AppPath & LOG_FOLDER & "\" & NomeFile & ".log"
    FileNum = FreeFile
    Open OutFile For Append As #FileNum
    Print #FileNum, s
err_msg:
    Close #FileNum
End Sub

 [SNIP]
Appurato che il problema non e' la funzione (apparte quel
passaggio stringa ByRef piuttosto che ByVal), indaghiamo su
altri dettagli:
1) Di che lunghezza/dimensione sono generalmente le stringhe
che passi alla funzione?
2) *Chi* chiama la funzione? Quante routine la invocano o
possono invocarla? Con che cadenza?


 possono invocarla? Con che cadenza?
tendenzialmente è sempre e solo una funzione che la chiama e quando la
chiama tante volte la chiama una volta al secondo.
La cosa che però mi fa strano è che quando accade "questo fenomeno",
qualunqe altra sub che accede ad un file per scrivere (le altre funzioni
sono praticamente identiche a meno del nome del file) si "blocca in
chiusura".
ciao

[*Pj 78* : 
m.perce...@tiscali.it
] ha scritto:

Se sei su Win2000, non decisamente almeno il SP2

 Se sei su Win2000, non decisamente almeno il SP2
Purtroppo i casini sono proprio iniziati quando ho abbandonato il mitico
"Nt4 Sp6a" per migrare verso "2000 Sp3". Problema comunque che si verifica
anche con XP...
tks cmq...

 ha scritto nel messaggio

La prima sarebbe "lo escludo!".
La seconda credo che debba rifarsi al post di Lokar: Verifica chi, come,
quando e quanto chiama quella funzione... che poi vuol ancora dire ... lo
escludo ;-)