C# 此代码有任何性能问题吗
这可能有点过头了,但我想要的是一个函数,如果数据库中的值不为null,则为我的class属性赋值,如果为null,则不执行任何操作。我可以用if语句来实现这一点,但我只需要一行。我想让它在我的代码中随处可见,但在这样做之前,我只是想知道这是否是考虑性能的正确方法。谢谢 调用代码:赋值(变量、值) Utils功能:C# 此代码有任何性能问题吗,c#,C#,这可能有点过头了,但我想要的是一个函数,如果数据库中的值不为null,则为我的class属性赋值,如果为null,则不执行任何操作。我可以用if语句来实现这一点,但我只需要一行。我想让它在我的代码中随处可见,但在这样做之前,我只是想知道这是否是考虑性能的正确方法。谢谢 调用代码:赋值(变量、值) Utils功能: public static void Assign(object value, ref Boolean variable) { if (IsRealString(value))
public static void Assign(object value, ref Boolean variable)
{
if (IsRealString(value)) // Check
{
switch (IsBoolean(value.ToString())) { case true: variable = Convert.ToBoolean(value); break; }
}
}
public static Boolean IsBoolean(String s)
{
Boolean bit;
if (Boolean.TryParse(s, out bit))
return true;
else
return false;
}
public static bool IsRealString(object s)
{
return s != null && !String.IsNullOrEmpty(s.ToString());
}
您对布尔类型执行switch语句有什么原因吗?这就是如果陈述是为了什么。我在这里看不到任何性能敏感的代码。去解决更大的实际问题,停止追逐鬼魂。你为什么要对布尔类型执行switch语句?这就是如果陈述是为了什么。我在这里看不到任何性能敏感的代码。去解决更大的实际问题,停止追逐鬼魂。我将按如下方式编写
IsRealString
方法:
public static bool IsRealString(object s)
{
return String.IsNullOrEmpty(s);
}
但当然,这并没有带来速度方面的真正改善:)
第二个功能是:
public static Boolean IsBoolean(String s)
{
Boolean bit = false;
return Boolean.TryParse(s, out bit);
}
我将按如下方式编写
IsRealString
方法:
public static bool IsRealString(object s)
{
return String.IsNullOrEmpty(s);
}
但当然,这并没有带来速度方面的真正改善:)
第二个功能是:
public static Boolean IsBoolean(String s)
{
Boolean bit = false;
return Boolean.TryParse(s, out bit);
}
没什么大不了的,但是您将
值
转换为布尔值两次,并将开关
语句用作if
语句。这里真正的问题是可读性,而不是性能。我建议简化一些事情:
public static void Assign(object value, ref bool variable)
{
if (value == null) return;
bool result;
if (Boolean.TryParse(value.ToString(), out result))
{
variable = result;
}
}
没什么大不了的,但是您将
值
转换为布尔值两次,并将开关
语句用作if
语句。这里真正的问题是可读性,而不是性能。我建议简化一些事情:
public static void Assign(object value, ref bool variable)
{
if (value == null) return;
bool result;
if (Boolean.TryParse(value.ToString(), out result))
{
variable = result;
}
}
如果存在任何性能问题,您应该能够使用探查器对其进行测量。在你不测量它们之前,不要试图提高性能。在封装这段代码时,您仍然能够轻松地对其进行改进 但是请注意,如果您有一个数据库,那么数据库将是您的瓶颈,而不是代码的这一部分。绝对是
您不应该尝试加速代码的原因是,它通常会降低代码的可读性。但是,您可以遵循其他人提出的建议(如果不使用switch,请简化IsRealString()),还可以考虑是否真的需要IsBoolean()或从Assign()调用Boolean.TryParse,因为这实际上会提高可读性 如果出现任何性能问题,您应该能够使用探查器对其进行测量。在你不测量它们之前,不要试图提高性能。在封装这段代码时,您仍然能够轻松地对其进行改进 但是请注意,如果您有一个数据库,那么数据库将是您的瓶颈,而不是代码的这一部分。绝对是
您不应该尝试加速代码的原因是,它通常会降低代码的可读性。但是,您可以遵循其他人提出的建议(如果不使用switch,请简化IsRealString()),还可以考虑是否真的需要IsBoolean()或从Assign()调用Boolean.TryParse,因为这实际上会提高可读性 代码中有一些问题远远超出了性能。首先,担心正确性和可读性,然后担心性能——这应该通过测量/分析来完成。这类代码不太可能成为瓶颈,因此从这里开始“优化”不太值得您花费时间 请注意,
IsRealString
不会返回可靠的答案。该方法接受一个对象,因此任何对象的默认ToString
将给出一些非空字符串,该字符串将返回true
你说你想要:
如果值
来自数据库的值不为null,如果为null,则不执行任何操作
你可以稍微澄清一下:
public static void Assign(object value, ref bool variable)
{
if (value == null) return;
// We're assuming that a valid value will always be a string. If this is not the
// case, then we need to handle other types
string valueString = value as string;
bool result;
if (bool.TryParse(valueString, out result))
{
variable = result;
}
}
注意:这与Greg的示例相同,只是我不想调用ToString()
,因为我们不知道对象的实现是做什么的
我们还发现了“规范”定义的一个问题。您(和我的)代码中的假设是,如果一个值被“设置”,它将始终被设置为字符串。您可以有一个数据集,其中的值不是字符串。例如,如果值是
布尔值
,则解析值字符串
将不会给出有效的结果。这实际上取决于数据集包含的内容。代码中有一些问题远远超出了性能。首先,担心正确性和可读性,然后担心性能——这应该通过测量/分析来完成。这类代码不太可能成为瓶颈,因此从这里开始“优化”不太值得您花费时间
请注意,IsRealString
不会返回可靠的答案。该方法接受一个对象,因此任何对象的默认ToString
将给出一些非空字符串,该字符串将返回true
你说你想要:
如果值
来自数据库的值不为null,如果为null,则不执行任何操作
你可以稍微澄清一下: