在C#中,使用字符数组(char[])而不是字符串有什么好处?

3
在C语言中没有字符串这个概念,对吗?那么,我想知道:在现代语言(例如C#)中,使用字符数组而非字符串是否能带来一些内存节省的优势。

3
在 C 语言中,“字符串”只是一个以零结尾的字符数组。因此,虽然没有特定的“字符串”类型,但确实有字符串。 - Some programmer dude
3
我怀疑,.NET运行时仅为字符串存储字符和字符串长度(在IL中,字符串使用单独的指令“ldstr”加载,换句话说,它们不像类那样被处理)。相同的字符串由完全相同的字符串实例表示 - 这称为内部化(这里节省了内存)。只有在不断修改字符串时(它们默认为不可变),才能节省内存-但在这种情况下,有StringBuilder内部使用char[]。 - csharpfolk
字符串是由字符组成的类。字符串类中的方法与字符类中的方法不同。因此,字符串和字符是不同的。 - jdweng
1个回答

0

在Python中,如果我理解你的意思正确,答案是“这取决于情况”。(出于方便起见,我使用python,你说“任何现代语言”)

我编写了一个函数来创建字母表的字符数组和另一个用于创建字母表字符串。然后分别运行它们一百万次。

字符数组大约需要1.7秒,而字符串数组只需要0.5秒。

“也许是开销的问题?”您可能会问。
好吧:我在全局初始化它们,然后对每个变量进行迭代循环(一百万次),将某些变量设置为当前字母。
字符数组花费了7.7秒,而字符串花费了9秒。

“如果你正在寻找特定元素怎么办?”
我遍历每个变量以查看元素是否包含'z'。字符数组花费了1.8秒,而字符串花费了0.4秒。

“这很有趣,也许只是赋值的问题?”
我的最后一个测试是仅迭代而不分配任何内容。 同样,字符数组比字符串迭代更快,仅需3.9秒,而字符串迭代则需要5.3秒。

看起来字符串在初始创建和搜索(我还假设排序也是如此,但我不打算编写排序函数来验证)方面更快,而字符数组在迭代事件(对于数组/字符串中的每个元素)方面更快。

希望这能有所帮助。
附注 - 我第一个测试类的代码:

#!/usr/bin/env python
import dis
import time

def char_func():
        my_c_var = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
        #print my_c_var

def stri_func():
        my_s_var = "abcdefghijklmnopqrstuvwxyz"
        #print my_s_var

start_time = time.time()
for i in range(1000000):
        char_func()
print("--- %s seconds ---" % (time.time() - start_time))

start_time = time.time()
for i in range(1000000):
        stri_func()
print("--- %s seconds ---" % (time.time() - start_time))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接