IDispose is neccessary, does Garbage collector work at end of loops etc
===

My doubt is about IDispose implementation. To my knowledge, when a code or section is complete, the variable or instance is disposed; please correct me if the statement is wrong.  The follow is part of my program:
       

         If Con.State = ConnectionState.Closed Then Con.Open()
                Cmd = New SqlCeCommand("Select * from BillItem", Con)
                Rdr = Cmd.ExecuteReader()
                While Rdr.Read = True
                    Dim x As New Classes.StockRoster
                    x.BillID = Rdr("BillID")
                    x.IsSales = Rdr("IsSales")
                    x.Quantity = Rdr("Quantity")
                    x.ContactBase = (From t As CommonCodes.ItemBase In ContactsbaseDict Where t.ID = BillContactDict(x.BillID)).First
                    x.StockEntityBase = StockEntitydict(Rdr("StockID"))
                    x.BillDate = Rdr("BillDate")
                    result.AddRange(x)
                End While
                Con.Close()
         End IF

In case of X variable here, would there be any memory improvement if I x (or StockRoster) would use IDispose class, couldn't the resources get dispose by default at end of each loop?   Thanks in advance