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.