我想知道使用它是否是更好的做法:
var a = b.Substring(6);
或
var a = b.Remove(0,6);
哪一个更有效/更快?显然substring有更多的选项你可以选择,但没有删除()不能做..抱歉,如果它的新手问题,我是C#的新手
答案 0 :(得分:4)
使用反射器查看代码,InternalSubString只执行一个wstrcpy,而Remove正在执行其中两个。我的猜测是第一个更快一点。
以下是字符串类的Remove方法的代码:
public unsafe string Remove(int startIndex, int count)
{
...
string text = string.FastAllocateString(num);
fixed (char* ptr = &this.m_firstChar)
{
fixed (char* ptr2 = &text.m_firstChar)
{
string.wstrcpy(ptr2, ptr, startIndex);
string.wstrcpy(ptr2 + (IntPtr)startIndex, ptr + (IntPtr)startIndex + (IntPtr)count, num - startIndex);
}
}
}
SubString方法调用的代码:
private unsafe string InternalSubString(int startIndex, int length)
{
string text = string.FastAllocateString(length);
fixed (char* ptr = &text.m_firstChar)
{
fixed (char* ptr2 = &this.m_firstChar)
{
string.wstrcpy(ptr, ptr2 + (IntPtr)startIndex, length);
}
}
return text;
}
答案 1 :(得分:1)
根据这篇文章,子字符串更快:
Fastest way to remove first char in a string
“我现在通过调用每个人大约90000000进行检查,我得到以下结果:删除:06.63 - TrimStart:04.71 - subString:03.09所以从结果子串是最好的” - @Amr Badawy
答案 2 :(得分:0)
字符串实例是不可变的 - 如果返回值不同,则Substring()和Remove()将分配新字符串,如果不是,则返回相同的字符串,如本例所示。子串更好地反映了意图,应该是首选 - 几乎总是,最好让代码易于理解,而不是担心微小的性能差异。