title: Memory Problems in C# using while(true)
body: <p>i would like to write an Client in C# which checks if a User is logged in on different Clients. The Client should run 24/7 and refreshes a Database with some State Information for each Client.</p>
  
  <p>My Problem is: The Command Line Tool takes more and more Memory, so ill think that there is a Problem that i allocate Memory which never gets released.</p>
  
  <p>I think it is that i am creating a ManagementScope, but i cannot all the Dispose() Method for it.</p>
  
  <p>Here is my Code:</p>
  
  <pre><code>static void Main(string[] args)
      {
  
          Ping pingSender = new Ping();
          PingOptions options = new PingOptions();
  
          string sqlconnectionstring = "Data Source=(local)\\SQLEXPRESS;Initial Catalog=clientstat;User ID=...;Password=....;Integrated Security=SSPI";
          SqlConnection clientread = new SqlConnection(sqlconnectionstring);
          clientread.Open();
  
          // Use the default Ttl value which is 128,
          // but change the fragmentation behavior.
          options.DontFragment = true;
  
          string username = "";
  
          // Create a buffer of 32 bytes of data to be transmitted.
          string data = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
          byte[] buffer = Encoding.ASCII.GetBytes(data);
          int timeout = 120;
  
          while (true)
          {
  
              SqlCommand clientcommand = new SqlCommand("SELECT * FROM Client WHERE StateID = @stateid", clientread);
              clientcommand.Parameters.Add(new SqlParameter("stateid", 1));
  
              SqlDataReader clientreader = clientcommand.ExecuteReader();
              while (clientreader.Read())
              {
                  string ipadress = Convert.ToString(clientreader["IP"]);
                  string clientid = Convert.ToString(clientreader["ID"]);
  
                  if (ipadress != string.Empty &amp;&amp; clientid != string.Empty)
                  {
                      // First Try To Ping Computer
  
                      PingReply reply = pingSender.Send(ipadress, timeout, buffer, options);
                      if (reply.Status == IPStatus.Success)
                      {
  
                          try
                          {
  
                              ManagementScope managementScope = new ManagementScope((@"\\" + ipadress + @"\root\cimv2"));
                              managementScope.Options.Username = "....";
                              managementScope.Options.Password = "...";
                              managementScope.Options.EnablePrivileges = true;
                              // ObjectQuery to Check if User is logged on
                              ObjectQuery objectQuery = new ObjectQuery("SELECT * FROM Win32_ComputerSystem");
                              ManagementObjectSearcher managementObjectSearcher = new ManagementObjectSearcher(managementScope, objectQuery);
                              ManagementObjectCollection querycollection = managementObjectSearcher.Get();
  
                              foreach (ManagementObject mo in querycollection)
                              {
                                  // Check Here UserName
                                  username = Convert.ToString(mo["UserName"]);
                                  if (username != "")
                                  {
                                      Console.WriteLine(ipadress + " " + username);
  
                                  }
  
                              }
                              querycollection.Dispose();
                              managementObjectSearcher.Dispose();
                          }
                          catch (Exception x)
                          {
                              Console.WriteLine(x.Message);
                          }
                      }
                  }
                  else
                  {
                      Console.WriteLine(clientid + " has no IP-Adress in Database");
                  }
              }
              clientcommand.Dispose();
              clientreader.Close();
              clientreader.Dispose();
          }
  
      }
  
  }
  </code></pre>
  
  <p>Any Ideas or Suggestions what i can improve here? Or what exactly could be a Problem? </p>
  
  <p>Thanks in advance</p>