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

    Variabili di applicazione duplicate

    per velociazzare la lettura di un array comune a molte pagine l'ho memorizzato su una variabile di applicazione, però avviene il problema che questo array a volte contiene dei valori duplicati.

    mi spiego meglio, ho win 2003 con iis , uno script ad un certo evento memorizza il valore di una marice dentro una variabile applicazione,

    application.lock
    application("nome") = array
    application.unlock

    logicamente prima effettuo il .lock e poi .unlock, questa operazione avviene ad intervalli di circa un ora, ma mi sono accorto che a volte leggendo il contenuto... il contenuto della matrice memorizzata cambia, come se tenesse in memoria con lo stesso nome, diverse copie della matrice memorizzata nella variabile di applicazione! La stesssa pagina a volte accede a dei valori altre volte ad altri, senza una logica compresa. ho persino bloccato le variabili di applicazioni prima di leggerle, e quando le leggo non le leggo mai direttamente ma le copio in una variabile... come è possibile che abbia per lo stesso nome variabile di application , valori diversi , prima uno poi l'altro poi l'altro e così via a caso? lo script che scrive è solo uno, gli altri leggono e basta. Se qualcuno può aiutarmi lo ringrazio.

    leggo i dati così

    array = application("nome")

    leggo array.... ma contiene dati differenti "quasi" ad ogni chiamata, in realtà mi sembra che di copie diverse ce ne siano solo due ...

    grazie ancora

    Amedeo

  2. #2
    l'array è fisso? o qualche script ne può cambiare i valori?

  3. #3
    una volta ogni ora viene ricreato l'array e memorizzato in una variabile di applicazione
    e a quel punto "sarebbe" fisso, durante l'ora l'array non viene modificato ma il valore viene recuperato dalla variabile di applicazione tramite

    array = application("array")

    mi sono spiegato?

  4. #4
    capito, ma non riesco a capire il problema. puoi fare un esempio? grazie

  5. #5
    allora il problema e' questo

    ho uno script del genere

    dim array

    if richiesto_aggiornamento then

    Application.lock
    Application.Contents.RemoveAll()

    ' +++ PER SICUREZZA RIMUOVO ANCHE ESPLICITAMENTE
    Application.Contents.Remove( "array" )
    Application.Unlock

    redim array( 1000 )

    for x = 0 to fine

    array(x) = valore

    next

    redim array(x-1)

    application.lock
    application("array") = array
    application.unlock

    else

    array = application("array")

    end if

    ' +++ script di lettura

    for x = 0 to ubound( array )
    response.write array( x )
    response.write "
    "
    next

    fine

    il problema è che quando viene effettuato l'aggiornamento dei valori, e questo avviene all'incirca ogni ora, quando vado a leggere l'array, mi restituisce valori diversi come se ne esistessero due con lo stesso nome e casualmente una volta ne legge uno e una volta ne legge un altro per intenderci, lo script una volta mi restituisce

    1
    2
    3

    e un altra volta

    a
    b
    c

    e questo avviene all'interno della stessa pagina, ma anche in pagine diverse, in maniera del tutto apparentemente casuale, come se appunto quando si andasse a leggere la variabile di applicazione ce ne fossero in memoria più di una...

  6. #6
    come viene eseguito lo script di aggiornamento? è un'azione pianificata?

  7. #7
    no, è uno script presente nella pagina che si attiva ad una certa ora se la data è maggiore della data memorizzata, anche lei, in una variabili di applicazione allora aggiorna l'array. Ti è capitato di incontrare questo problema in passato? Hai idee? Comunque grazie per l'attenzione

  8. #8
    quindi l'aggiornamento potrebbe farlo un qualunque utente? forse dipende da questo... prova semplicemente ad isolare la pagina che aggiorna, e a metterla come attività pianificata sul server

  9. #9
    il problema non è che la faccia anche un utente, il problema è che i valori si duplicano con lo stesso nome, perchè avviene questo? secondo quale logica o errore mio una variabile di applicazione puo assumere due se non più valori contemporaneamente ? è questo che non mi spiego. Tu dici che se avvengo due aggiornamenti in contemporanea si uplicano le variabili e al momento di leggerle ne recupera casualmente uno tra i diversi valori?! perché poi in fondo è questo che succede. Comunque provero' ad isolare l'applicazione che esegue l'aggiornamento solo che poi sono costretto ad usare il global asa per inizializzare dei valori cosa che volevo evitare.

  10. #10
    no, una variabile può assumere un solo valore per volta, questo è un fondamento!

    il fatto è che l'aggiornamento è frammentato in giro, e quindi potrebbe essere eseguito da A mentre B sta leggendo

    es

    B legge
    A aggiorna
    B legge ancora

    B potrebbe leggere due cose diverse

    ma in questo caso, anche se centralizzi, non elimini completamente la possibilità che ciò si verifichi ancora. c'è da chiedersi perché rileggi, se hai già letto ad inizio pagina

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.