c# - 在没有工厂的情况下有条件地推迟昂贵的调用
问题描述
这更像是一个理论问题。假设我有以下代码
object ExpensiveOperation()
{
// some expensive computation
}
[MethodImpl(MethodImplOptions.AggressiveInlining)]
void DoIf(bool condition, object expensiveValue)
{
if (condition)
{
// do something with expensiveValue
}
}
void Foo()
{
bool maybe = new Random().Next() % 2 == 0;
DoIf(maybe, ExpensiveOperation());
}
是否可以将方法调用推迟到ExpensiveOperation()
块内if
?
排除以下选项:
- 使用像
DoIf(bool condition, Func<object> expensiveValueFactory)
. - 手动内联
DoIf
(将if
语句移动到 中Foo()
)。
最后,我希望在condition
调用ExpensiveOperation()
. 如果这仅在 jitting 后发生在 asm 级别(通过优化),那很好。它不需要可靠,我只是好奇它是否可能。除了工厂,我想不出别的办法。
同样,这是一个人工样本,比其他任何东西都更多的理论制作。
解决方案
推荐阅读
- javascript - 无法使用布局渲染 React 组件
- android - 如何使用处理程序线程进行多线程
- swift - 如何在 NSComboBox 或 NSPopUpButton 中选择默认选项?
- scripting - Windbg - 可以抑制 .outmask 1 或 .outmask /d 的输出吗?
- django - 是否有 django 包可以让我从 Point 字段获取国家/地区?
- jersey - 没有 DTO 的 Jersey json POST
- css - Itext 对 transform:scale 的支持
- html - 导航栏切换下拉菜单上的悬停效果不适用于动态数据
- vba - 查找多次出现的文本(在工作表中查找最右边的字符串)并复制
- android - 单击按钮时的列表视图