在函数内给出以下C#代码:
....
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
block之后,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
是一个未使用的变量。
我的问题: C#代码优化或“发布”版本会完全删除这行代码并导致CreateDocumentCollectionAsync
永不触发吗?
C#优化课程告诉我,在函数中不需要“释放”时,“释放”将立即构建垃圾收集变量,而调试构建则不这样做(出于调试目的)。
我现在想知道它是否如此急切,甚至可以优化未使用的变量分配(在后台触发操作)。
不,编译器和JIT都不会优化您的方法调用。
有一个的JIT编译器做什么列表。if (false) { ... }
例如,它确实优化了离开块或未使用的变量分配。它不仅可以优化您的方法调用。如果是这样,则对void
方法的每次调用也都应该消失。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句