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:
Non viene eseguita quindi credo che la classe non venga eliminatacodice:~Client() { Log.Write("Woo Class Destroyed! :)"); }
E cosa pių importante non viene liberata memoria![]()

Rispondi quotando