确定字符串是否已被修改的过程会导致性能下降吗?如果是这样,我们可以进一步优化它吗?

青菜

我需要一种方法来检测string我的代码中是否有更改,但是,我同时对自己的性能保持谨慎:

参考这个问答

具体来说,此代码段:

// holds a copy of the previous value for comparison purposes
private string oldString = string.Empty; 

private void button6_Click(object sender, EventArgs e)
{
    // Get the new string value
    string newString = //some varying value I get from other parts of my program

    // Compare the old string to the new one
    if (oldString != newString)
    {
        // The string values are different, so update the ListBox
        listBox1.Items.Clear();
        listBox1.Items.Add(x + /*other things*/);   
    }

    // Save the new value back into the temporary variable
    oldString = newString;
}

我目前正在研究Grasshopper 3D组件。每个组件本身都是一个类库,该main方法是一个称为的方法SolveInstance()我实际上不太确定其运行的条件,但是我所知道的是,它至少在一个节中运行了多次,因此您的图形UI几乎是实时的,或者对于用户来说是难以察觉的。人类的眼睛。

对于我的特定示例,这就是我的特殊情况(未经测试的伪代码)。

// instance vars
private string _oldOutputString = string.Empty; 
private string _newOutputString = string.Empty;


// Begin SolveInstance() method
// This constructor call saves a string to _newOutputString based on two lists
_valueList = new ValueList(firstList, secondList);

// Compare the old string to the new one
if (_oldOutputString != _newOutputString)
{
    // Save the new value back into the temporary variable
    _oldOutputString = _newOutputString;

    // Call eventargs method
    Menu_MyCustomItemClicked(_sender, _e);
}

DA.SetData(0, _oldOutputStr);

我的问题是:这样做会导致特定代码每秒被调用多次,从而对性能造成影响吗?

乔恩·汉纳

这样做会在每秒调用多次特定代码的情况下对性能造成影响吗?

是的。

这不是重要的事情,重要的是它将引起重大打击。

这取决于要花多长时间,以及什么对您而言很重要。

唯一知道的方法就是测量。

但是,值得考虑的是什么使某些字符串比较比其他字符串比较慢。

最快的字符串比较是两个字符串实际上是完全相同的对象。特别是;

string a = "ABC";
string b = a;
bool c = a == b; // Very fast.

下一个最快的是一个但不是两个都为null的情况(无论如何都为null就是上述情况的一个示例)。

下一个最快的是它们具有不同的长度,对于那些比较类型,如果它们具有不同的长度,它们将不相等。这不适用于区分大小写的比较,因为如果将“weißbier”大写为“ WEISSBEIR”,则长度是不同的,但是对于精确匹配比较而言确实如此。

下一个最快的是它们在早期有所不同。

最慢的是两个字符串是不同的对象,但实际上是相等的。

字符串相等性测试的平均成本与字符串的长度成正比。

我们可以通过中断字符串(无论是在默认的内部缓冲池中还是在自定义的字符串缓存中)来降低最慢的速度,如果我们知道所有字符串都经过了相同的过程,则可以使所有相等比较的速度与最快的情况一样快(因为我们已确保两个字符串将是相同的字符串,否则它们将不相等)。但是,这样做本身需要时间,因此并不总是值得的。

总而言之,如果仅在实际更改中更改字符串,那么实际上它比重复构建字符串要快得多,从而可能最终得到与开始时相同的字符串。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章