在c#中使用字符数组(char [])而不是字符串
Posted
技术标签:
【中文标题】在c#中使用字符数组(char [])而不是字符串【英文标题】:Using of Array of chars (char[]) instead of strings in c# 【发布时间】:2016-06-19 22:11:24 【问题描述】:C语言中没有字符串这个概念吧? 所以,我想知道:在现代语言(例如 C#)中使用字符数组而不是字符串是否会节省内存。
【问题讨论】:
在 C 中,“字符串”只是一个以零结尾的字符数组。因此,虽然它不存在特定的string
类型,但它确实有字符串。
我怀疑,字符串的 .NET 运行时仅存储字符 + 字符串的长度(在 IL 中,字符串是使用单独的指令 ldstr
加载的,换句话说,它们不被视为类)。相同的字符串由完全相同的字符串实例表示 - 这称为实习(此处节省内存)。只有在不断修改字符串时才能节省内存(默认情况下它们是不可变的) - 但在这种情况下,StringBuilder 在内部使用 char[]
字符串是由字符组成的类。字符串类中的方法与字符类中的方法不同。所以字符串和字符是不同的。
【参考方案1】:
在 Python 中,如果我的理解正确,答案是“视情况而定”。 (我使用 python 是为了方便,你说“任何现代语言”)
我创建了一个创建字母字符数组的函数,以及另一个创建字母字符串的函数。然后每个运行 100 万次。
字符数组大约需要 1.7 秒,而字符串数组需要 0.5 秒。
“也许这是一个开销的事情?”你可能会问。 很好:我对它们进行了全局初始化,然后通过循环(100 万次)对每一个进行迭代,将一些变量设置为当前字母。 字符数组需要 7.7 秒,而字符串需要 9 秒。
“如果您正在寻找特定元素怎么办?” 我遍历每个变量以查看“z”是否在元素中。 char 数组耗时 1.8 秒,而字符串耗时 0.4 秒。
“这很有趣,也许这只是一个作业?” 我的最后一个测试是在不分配任何内容的情况下进行迭代。 同样,char 数组的速度更快,为 3.9 秒,而字符串迭代为 5.3 秒。
所以看起来字符串对于初始创建和搜索更快(我也假设排序,但我不打算编写排序函数来找出答案),而字符数组对于迭代事件更快(对于数组中的每个/字符串)。
希望这会有所帮助。 PS - 我的第一个测试类的代码:
#!/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))
【讨论】:
以上是关于在c#中使用字符数组(char [])而不是字符串的主要内容,如果未能解决你的问题,请参考以下文章
c++中,如果cout 或者cin char类型的数组名,指针,都会把字符串输出,而不是输出地址,