Учитывая следующий код С# внутри функции:
....
var documentCollection =
client.CreateDocumentCollectionQuery("dbs/" + database.Id)
.Where(c => c.Id == DocumentCollectionName)
.AsEnumerable()
.FirstOrDefault();
if (documentCollection == null)
{
documentCollection =
await
client.CreateDocumentCollectionAsync(
"dbs/" + database.Id,
new DocumentCollection { Id = DocumentCollectionName });
}
return client;
Примечание. Я не возвращаю documentCollection
, мне просто нужно, чтобы он был инициализирован, если не был уже (вызов CreateDocumentCollectionAsync
). Итак - после блока if
documentCollection
становится неиспользованной переменной.
Теперь - ReSharper предлагает оптимизировать это:
var documentCollection =
client.CreateDocumentCollectionQuery("dbs/" + database.Id)
.Where(c => c.Id == DocumentCollectionName)
.AsEnumerable()
.FirstOrDefault()
?? await
client.CreateDocumentCollectionAsync(
"dbs/" + database.Id,
new DocumentCollection { Id = DocumentCollectionName });
И теперь указывает, что documentCollection
- неиспользуемая переменная.
Мой вопрос: будет оптимизация кода С# или сборка "release" полностью удалить эту строку кода и привести к тому, что CreateDocumentCollectionAsync
никогда не будет срабатывать?
Курс оптимизации С# научил меня, что "релиз" строит переменные сбора мусора, как только они не нужны "вниз по строке" в функции, тогда как отладочные сборки этого не делают (для целей отладки).
Теперь я задаюсь вопросом, так ли это, даже если он оптимизирует неиспользуемое назначение переменной (которое запускает операцию в фоновом режиме).