首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在C#中传递大字符串作为返回值的速度有多慢?

在C#中传递大字符串作为返回值的速度有多慢?
EN

Stack Overflow用户
提问于 2013-07-15 14:30:08
回答 3查看 1K关注 0票数 4

我想知道字符串的返回值在C#中是如何工作的。在我的一个函数中,我生成html代码,字符串非常大,然后我从函数中返回它,然后将它插入到页面中。但是我想知道我应该传递一个巨大的字符串作为返回值,还是只是将它从同一个函数插入到页面中?

当C#返回一个字符串时,它会从旧的字符串创建一个新的字符串,然后返回那个字符串吗?

谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-07-15 14:31:17

从函数返回时,不复制字符串(或任何其他引用类型),仅复制值类型。

票数 21
EN

Stack Overflow用户

发布于 2013-07-15 14:34:36

System.String是一个引用类型(类),因此作为参数传递和返回只涉及引用(32或64位)的复制。

字符串的大小与此无关。

票数 8
EN

Stack Overflow用户

发布于 2013-07-15 15:00:51

返回一个字符串是一个廉价的操作-正如前面提到的,它纯粹是返回32或64位(4或8字节)的问题。

然而,正如Sten Petrov指出的那样,string +操作涉及到创建一个新的string,并且可能会有一点开销。如果你想节省性能和内存,我建议这样做:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
static int i = 0;
static void Main(string[] args)
{
    while (Console.ReadLine() == "")
    {

        var pageSB = new StringBuilder();

        foreach (var section in new[] { AddHeader(), AddContent(), AddFooter() })
            for (int i = 0; i < section.Length; i++)
                pageSB.Append(section[i]);

        Console.Write(pageSB.ToString());
    }

}

static StringBuilder AddHeader()
{
    return new StringBuilder().Append("Hi ").AppendLine("World");
}

static StringBuilder AddContent()
{
    return new StringBuilder()
        .AppendFormat("This page has been viewed: {0} times\n", ++i);
}

static StringBuilder AddFooter()
{
    return new StringBuilder().Append("Bye ").AppendLine("World");
}

在这里,我们使用StringBuilders来保存我们想要连接的所有字符串的引用,并等到最后才将它们连接在一起。这将省去许多不必要的添加(相比较而言,这会占用大量的内存和CPU )。

当然,我怀疑你在实践中是否真的需要这样做-如果你这样做了,我会花一些时间学习池化等,以帮助减少所有字符串构建器产生的垃圾-也许可以考虑创建一个更适合你的目的的自定义“字符串容器”。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17656700

复制
相关文章
当return遇到try、catch、finally时会发生什么?
在Java中的return语句和方法有密切的关系,return语句用在方法中,有两个作用,一个是返回方法指定类型的值(这个值总是确定的),一个是结束方法的执行(仅仅一个return语句)。就像下边这样:
AlbertYang
2020/09/08
2.8K0
当你在 Linux 上启动一个进程时会发生什么?
英文:Julia Evans,编译:Linux中国 / jessie-pang linux.cn/article-9256-1.html 本文是关于 fork 和 exec 是如何在 Unix 上工作的。你或许已经知道,也有人还不知道。几年前当我了解到这些时,我惊叹不已。 我们要做的是启动一个进程。我们已经在博客上讨论了很多关于系统调用的问题,每当你启动一个进程或者打开一个文件,这都是一个系统调用。所以你可能会认为有这样的系统调用: start_process(["ls","-l","my_cool_dir
企鹅号小编
2018/02/02
1.1K0
当进程退出和机器宕机时TCP连接发生什么
我们使用两台机器进行实验,一台192.168.0.112作为服务端,一台192.168.0.104作为客户端,服务端机器使用Python程序启动一个服务程序,监听8081端口,客户端机器使用telnet命令连接服务端
书唐瑞
2022/11/14
8050
当进程退出和机器宕机时TCP连接发生什么
当输入getsystem会发生什么?
“Meterpreter的getsystem命令是非常nice的!在输入getsystem的命令之后,Meterpreter就会神奇的将权限从本地管理员提升为SYSTEM用户。”
Gamma实验室
2020/12/23
1.1K0
当输入getsystem会发生什么?
当输入getsystem会发生什么?
getsystem命令包含有三种技术,前两个基于命名管道模拟,最后一个依靠令牌复制。
MssnHarvey
2022/08/10
3920
MySQL 数据库备份(完全备份与恢复)
随着办公自动化和电子商务的飞速发展,企业对信息系统的依赖性越来越高,数据库作为信息系统的核心,担当者重要的角色 数据库备份,是在数据丢失的情况下,能及时恢复重要数据,防止数据丢失的一种重要手段 一个合理的数据库备份方案,能够在数据丢失时,有有效地恢复数据,而且也需要考虑技术实现难度和有效地利用资源
全栈程序员站长
2022/08/28
18.4K0
MySQL 数据库备份(完全备份与恢复)
当 Redis 发生高延迟时,到底发生了什么
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是 Redis 也会发生延迟时,这是就需要我们对其产生原因有深刻的了解,以便于快速排查问题,解决 Redis的延迟问题
Bug开发工程师
2019/11/15
1.6K0
当 Redis 发生高延迟时,到底发生了什么
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是 Redis 也会发生延迟时,这是就需要我们对其产生原因有深刻的了解,以便于快速排查问题,解决 Redis的延迟问题
程序员历小冰
2019/12/05
6270
当 Redis 发生高延迟时,到底发生了什么
Redis 是一种内存数据库,将数据保存在内存中,读写效率要比传统的将数据保存在磁盘上的数据库要快很多。但是 Redis 也会发生延迟时,这是就需要我们对其产生原因有深刻的了解,以便于快速排查问题,解决 Redis的延迟问题
程序员历小冰
2019/11/12
1.2K0
当 Redis 发生高延迟时,到底发生了什么
当 snapshot 失败时发生了什么
工作中遇到了与 snapshot 异常相关的问题,特此总结一下,与 snapshot 相关的流程图如下:
shengjk1
2020/10/16
1K0
当 snapshot 失败时发生了什么
当UNet遇见ResNet会发生什么?
这篇文章主要以几篇经典的分割论文为切入点,浅谈一下当Unet遇见ResNet会发生什么?
BBuf
2020/04/15
3.3K0
当UNet遇见ResNet会发生什么?
选择篇(011)-当我们这样做时会发生什么?
参考答案:A 解析: 这在JavaScript中是可能的,因为函数也是对象!( 原始类型之外的所有东西都是对象) 函数是一种特殊类型的对象。您自己编写的代码并不是实际的函数。该函数是具有属性的对象,此属性是可调用的。
齐丶先丶森
2022/05/12
1920
完全备份、差异备份、增量备份的区别
通过上面的概念分析可以知道,差异备份与增量备份的区别在于它们备份的参考点不同:前者的参考点是上一次完全备份、差异备份或增量备份,后者的参考点是上一次完全备份。
红目香薰
2022/11/29
4.4K0
完全备份、差异备份、增量备份的区别
当大数据遇上大阅兵会发生什么?
纪念中国人民抗日战争暨世界反法西斯战争胜利70周年大阅兵于9月3日顺利进行。阅兵过后,还有什么不可错过?头条指数带你大数据看阅兵。
IT阅读排行榜
2018/08/13
4610
当大数据遇上大阅兵会发生什么?
后台进程(守护进程)自动备份PostgreSQL数据库
从当前目录中读取ini配置文件的登录数据库必要的参数,登录数据库后获取两次备份的间隔天数,然后启动一个线程隔1分钟检查一下是否需要备份。 之前查资料查了好久,才找到 "pg_dump \"host=%s port=%d user=%s password=%s dbname=%s\" > db_bak\\%s.bak" 这种可以避免输入密码,实现自动备份(不用配置环境变量或改动数据库的登录权限) #include <windows.h> #include <stdio.h> #include <stdli
_gongluck
2018/03/08
1.3K0
Android 当点击飞行模式都发生了什么?
今天中午午休时,我把手机开飞行模式了,能看到 WiFi 、蜂窝数据和蓝牙都关闭了,心想,这时候还能收到短信吗?顺着好奇心,我们不妨来研究一下源码,看看点击飞行模式都发生了什么?
吴小龙同學
2019/12/11
1.7K0
5SXE04-0150/GVC707AE01 两个以上完全单独的CPU
上面提及过的处理器都是一些常量仪器[注 15],而针对向量处理的CPU是较不常见的类型,但它的重要性却越来越高。事实上,在计算机计算上,向量处理是很常见的。顾名思义,向量处理器能在一个命令周期(one instruction)处理多项数据,这有别于只能在一个命令周期内处理单一数据的常量处理器。这两种不同处理数据的方法,普遍分别称为‘单指令,多资料’(SIMD)及‘单指令,单资料’(SISD)。向量处理器最大的优点就是能够在同一个命令周期中对不同的工作进行优化,例如:求一大堆数据的总和及向量的数量积,更典型的例子就是多媒体应用程序(画像、影像、及声音)与及众多不同总类的科学及工程上的工作。当常量处理器只能针对一组数据于单一命令周期内完全执行提取、解码、执行和写回四个阶段的同时,向量处理器已能对较大型的数据如相同时间内执行相同动作。当然,这假设了这个应用程序于单一命令周期内对处理器进行多次要求。
用户10384942
2023/04/27
2630
5SXE04-0150/GVC707AE01 两个以上完全单独的CPU
当腾讯教育的产品穿越到古代,会发生什么?
公元2021年MEET教育科技峰会,《清明上“学”图》惊艳面世,作为《清明上河图》的“姊妹篇”,画作采用一样的技法,一样的风俗长卷,真实再现了科技感十足的古代校园。知情人士透露,该画现藏于腾讯教育数字展厅,今起对公众开放展出,一起戳大图欣赏传世之作…… (横屏观看体验更佳)
鹅老师
2021/04/22
3470
当Redis数据磁盘坏掉之后会发生什么
当Redis cluster集群数据所在磁盘的RAID卡坏掉了之后会发生什么?集群会不会进行故障迁移,以及怎么快速恢复。
zeekling
2022/08/26
4210
当妈妈在淘宝购物的时候,都发生了什么?(下篇)
在上一篇文章中,讲到了你的妈妈成功从你手中夺得了电脑的控制权,然后打开了淘宝网并且在网站首页搜索框中搜索了“美丽的裙子”,之后用一种挑剔的眼光盯着电脑屏幕一个多小时,就为找到一条心爱的裙子。在浏览各种裙子的过程中发生了什么呢?最终决定购买一条裙子的时候又发生了什么?且听张叔叔慢慢道来。
张叔叔讲互联网
2018/10/29
6700

相似问题

PHP MySQL将GROUP_CONCAT结果视为单独的项

22

单独的group_concat()结果

12

group_concat不适用于php

14

如何分割GROUP_CONCAT php MySQL后的图像链接

14

PHP对某些链接的单独访问

11
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文