Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C#] Problema chat

  1. #1
    Utente di HTML.it L'avatar di 22kakà
    Registrato dal
    Feb 2008
    Messaggi
    160

    [C#] Problema chat

    Sto cercando di realizzare una chat in c#, ma ho un problema con l'utilizzo della memoria ...

    In pratica c'è un server centrale che accetta le connessioni dai client.
    Quando viene accettata una nuova connessione viene creata una nuova classe per ogni client (new client ...), e fin qui funziona tutto alla perfezione.
    Però quando il client si disconnette dovrei fare in modo che quella classe venga rimossa per liberare memoria.

    Come posso fare????

  2. #2
    Utente di HTML.it L'avatar di 22kakà
    Registrato dal
    Feb 2008
    Messaggi
    160
    Nessuno sa aiutarmi???

    Sò che bisogna usare il garbage collection

    ma come???
    fa tutto da solo o devo scrivere una parte di codice???

  3. #3
    Utente di HTML.it L'avatar di 22kakà
    Registrato dal
    Feb 2008
    Messaggi
    160
    Avevo pensato di utilizzare un thread che controlla se l'utente non scrive messaggi da più di 60 secondi e se questa condizione è verificata, l'utente viene disconnesso e la classe dell'utente viene eliminata con il garbage collection ...

    con questo codice:
    codice:
        internal void ThreadedCheckEachPacketTiming()
        {
            double TimeToAdd = 60;
            while (true)
            {
                Console.WriteLine("Ricerca utenti inattivi");
                System.Threading.Thread.Sleep(60000);
                System.Collections.Hashtable TmpHashtable = (System.Collections.Hashtable)SocketManager.activeSockets.Clone();
                System.Collections.IEnumerator myEnum = TmpHashtable.GetEnumerator();
                while (myEnum.MoveNext())
                {
                    System.Collections.DictionaryEntry de = (System.Collections.DictionaryEntry)myEnum.Current;
                    Client user = (Client)de.Value;
                    DateTime dtWhenItRunsOut = user._TimeLastPacket.AddSeconds(TimeToAdd);
                    if (DateTime.Now.CompareTo(dtWhenItRunsOut) == 1) // Timed out!
                    {
                        Console.WriteLine("User on socket ID '" + user._MySocketID + "' timed out");
                        try
                        {
                            user.DropConnection();
                        }
                        catch { }
                    }
                }
                TmpHashtable = null;
                GC.Collect();
            }
        }

    Ma non mi funziona

    La classe non viene eliminata
    La funzione:
    codice:
        ~Client()
        {
            Log.Write("Woo Class Destroyed! :)");
        }
    Non viene eseguita quindi credo che la classe non venga eliminata

    E cosa più importante non viene liberata memoria

  4. #4
    Utente di HTML.it L'avatar di albgen
    Registrato dal
    Jun 2005
    Messaggi
    3,249
    non c'è bisogno di chiamare GC.Collect(); il gc fà tutto in automatico !!!

    se non viene eliminata si vede che da qualche parte c'è un riferimento a quel oggetto...
    I got the remedy

  5. #5
    Utente di HTML.it L'avatar di 22kakà
    Registrato dal
    Feb 2008
    Messaggi
    160
    quindi non devo preoccuparmi della gestione della memoria se ho capito bene??

    Non devo nemmeno inizializzarlo??

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.