我有一个用例,只有在有内容要显示时才显示模态弹出窗口。内容可在门户中配置。
检查内容是否不为空然后渲染模态弹出代码
缺点 - 性能低:字符串检查成本高
引入一个新的位列并使其在门户中可配置以
指示是否需要显示模态弹出窗口。
缺点 - 更多空间:用于存储值的附加列
您会推荐哪种方法,为什么?
你的问题前提不正确
检查
string.IsNullOrEmpty
实际上是一个非常便宜的操作,来源如下:
public static bool IsNullOrEmpty([NotNullWhen(false)] string? value)
{
if ((object)value != null)
{
return value!.Length == 0;
}
return true;
}
我们可以通过以下基准证明这是一个快速操作:
[MemoryDiagnoser]
[ShortRunJob]
public class IsNullOrEmptyBenchmark
{
private const string Input = "here is an input";
[Benchmark(Baseline = true)]
public bool IsNulLOrEmptyBenchmark()
{
var isNullOrEmpty = true;
for (int i = 0; i < 1000; i++)
{
isNullOrEmpty = string.IsNullOrEmpty(Input);
}
return isNullOrEmpty;
}
}
在我的机器上,这个 1000 次迭代基准测试(带有后续分配)仅需要 338 ns(每个操作的三分之一纳秒,这基本上是一个空操作),
而且很可能与必须维护额外数据的成本相比相形见绌。此外,无论要执行模态的代码都将比此检查昂贵得多。
对于 #1,您不是在客户端检查字符串,而是在查询中的服务器上进行检查 (
len(col) > 0
)。
对于#2,你在复制数据,这不仅空间效率低下,而且是一个非常明显的故障点。
就是说,如果您所做的只是显示一个模态对话框,那意味着您一开始就不能经常这样做。优化它是在浪费你的时间(虽然好的设计通常不是,#2 是糟糕的 RDMBS 设计的定义)。