DNN makes extensive use of IList and IList<T>. While effective, this limits functionality when dealing with large data sets. For example, when creating a feature controller and implementing ModuleSearchBase, the return value required is an IList<SearchDocument>. Upon initial or reindexing, this requires every data element stored or processed in the module to be read into the server's memory space before the collection can be returned. For custom modules dealing with millions of records, making use of the yield operator and returning an IEnumerable<T> would allow the information to be streamed through the system without needing to have the entire set in memory first. This results further in potentially large performance gains and reduced hosting costs (less memory pressure).