SPQuery никоим образом не замедлит ваш код, поэтому в каждой другой статье по SharePoint вы найдете совет, как использовать SPQuery для повышения производительности. Чтобы сделать вещи еще более интересными, GetItemByID внутренне использует SPQuery для получения элемента обратно к вам, ниже приведен фрагмент кода, взятый из функции GetItemByID
SPQuery query = new SPQuery();
query.Query = "<Where><Eq><FieldRef Name=\"ID\"></FieldRef><Value Type=\"Integer\">" + id.ToString(CultureInfo.InvariantCulture) + "</Value></Eq></Where>";
Здесь важно отметить, что SPQuery имеет свойство Internal с именем SingleItemId, которое принимает Id идентификатора элемента, который вы хотите получить, дальнейшая трассировка того, как он используется, не может быть найдена, когда вызов в конечном итоге обнаруживается в COM-объекте.
Сказано, что у вас есть два варианта
Вариант 1:
Оберните ваш код GetItemByID в блоке catch и проверьте наличие исключения. Если это произойдет, вы можете пометить флаг, чтобы обозначить, что Item Id является недействительным, и принять меры для него.
Вариант 2: Используйте SPQuery, вы можете проверить разницу во времени GetItemByID, а с помощью SPQuery вы увидите, что их нет, а совсем немного.