title: What's the efficient way to search and filter ObservableCollection
body: <p>I've a database consisting of about 1 million records. My application makes frequent incremental search on these records and filters the UI list. The scenario is more like the 'phone contact search'.<br>
  Currently i'm following this:</p>
  
  <blockquote>
    <ol>
    <li>Load the data into <code>List&lt;myModel&gt;</code> in the DataSource Layer`</li>
    <li>Send it to MainViewModel</li>
    <li>Load <code>List&lt;myModel&gt;</code> into <code>ObservableCollection&lt;myViewModel&gt;</code>
    (bound to ListView)</li>
    <li>According to the keyword, filter the `ObservableCollection</li>
    <li>While the application is being closed, update the database [Since the
    ObservableCollection may also be
    updated by the user]</li>
    </ol>
  </blockquote>
  
  <hr>
  
  <p>My Questions:</p>
  
  <ul>
  <li>Is this the efficient way?<br> </li>
  <li>Now my applicatation consumes around 30 to 50 MB of memory. Is that fair?<br></li>
  <li>Or should i perform my search in the database instead? [but i cannot compromise on speed]<br></li>
  <li>Should i always create a list of myModel and load it into my ObservableCollection?<br></li>
  <li>Also advise me on the filtering technique that is much suited for <strong>incremental search</strong>(4th point). Currently I have a GenericList behind containing the entire collection for lookup and add the filtered items to the ObservableCollection, clearing all the previous items.</li>
  </ul>
  
  <p><strong>Edit: Previously i checked the memory consumption with only 37k records. With 250k records, the memory consumption is more than 100 MB:(. Hence now I've planned to keep only some 10k records in memory, If it goes beyond that I'll query the db. Any suggestions?</strong></p>
  
  <p>Thanks in advance,
  Veer</p>