When you call SPList.Items.Add() it will fetch all list items through an SPQuery. This can be very costly when you have a considerable amount of items.
// Microsoft.SharePoint.SPList public SPListItemCollection Items { [ClientCallableExceptionConstraint(FixedId = "c", ErrorType = typeof(SPQueryThrottledException), Condition = "There is a throttle failure.", ErrorCode = -2147024860)] get { return this.GetItems(new SPQuery { ViewAttributes = "Scope=\"Recursive\"" }); } }
When you call SPList.AddItem() it avoids fetching all items. You'll see in the implementation (code below) that it does a 'trivial' query which basically says "get me all items where ID = -1".
// Microsoft.SharePoint.SPList public SPListItem AddItem() { SPQuery query = this.HasExternalDataSource ? SPQuery.TrivialQueryExternalList : SPQuery.TrivialQuery; SPListItemCollection items = this.GetItems(query); return items.Add(); }
When you're adding an item it makes no sense to first fetch all existing items in the list. The old implementation is preserved for backward compatibility.