我需要一种方法来检测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] 删除。
我来说两句