c# - 在 C# 中使用字符数组 (char[]) 而不是字符串

标签 c# c string char

C语言中没有字符串这个概念吧? 所以,我想知道:在现代语言中使用字符数组而不是字符串是否会节省内存,例如 C#。

最佳答案

在 Python 中,如果我没理解错的话,答案是“视情况而定”。 (我使用 python 是为了方便,你说的是“任何现代语言”)

我创建了一个创建字母表字符数组的函数,另一个创建字母表字符串的函数。然后分别运行它们 100 万次。

与字符串数组的 0.5 秒相比,字符数组耗时约 1.7 秒。

“也许这是头顶上的事情?”你可能会问。
很好:我对它们进行了全局初始化,然后通过一个循环(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# - 在 C# 中使用字符数组 (char[]) 而不是字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35825466/

相关文章:

c# - 如何使用 C# 卸载 USB 设备

c# - .Net cookie 不断返回,过期时间为零

c - 主结构和依赖关系

java - 在 Java 中从字符串中获取 Double

python - 函数 def show_table 创建并返回表示二维表的格式化字符串

C# - 从项目的发布版本中排除单元测试

c# - 为什么 WebClient.DownloadStringTaskAsync() 会阻塞? - 新的异步 API/语法/CTP

C:从分隔的源字符串创建字符串数组

c - 为什么gets函数如此危险以至于不应该使用它?

Python:从字符串中删除重复字符的最佳方法