c# - 哪个占用更多内存,字符串值还是长值?

标签 c# vb.net variables memory byte

我有一个连接到 WCF 服务的客户端应用程序,我从服务器获取文件大小作为 long 值,然后在客户端将其转换为 string所以它看起来像 ex:52.21 MB

每次用户更改当前目录路径时,应用程序都会获得太多文件大小。

我的问题:我是否应该从 WCF 服务应用程序 将值转换为 string 格式,然后将其作为 返回给客户端>string 或者我应该将大小作为 long 值返回并让客户端将其转换为 string 格式

换句话说,哪个值在内存中占用更多字节:

long size = 55050240;
string size = "52.5 MB"; 

long large_size = 56371445760;
string large_size = "52.5 GB";

更新:

我使用这种方法将 long 值转换为字符串格式:

private string ConvertUnit(long source)
    {
        const int byteConversion = 1024;
        double bytes = Convert.ToDouble(source);

        if (bytes >= Math.Pow(byteConversion, 3)) //GB Range
        {
            return string.Concat(Math.Round(bytes / Math.Pow(byteConversion, 3), 2), " GB");
        }
        else if (bytes >= Math.Pow(byteConversion, 2)) //MB Range
        {
            return string.Concat(Math.Round(bytes / Math.Pow(byteConversion, 2), 2), " MB");
        }
        else if (bytes >= byteConversion) //KB Range
        {
            return string.Concat(Math.Round(bytes / byteConversion, 2), " KB");
        }
        else //Bytes
        {
            return string.Concat(bytes, " Bytes");
        }
    }

小问题:string 值和long 值哪个占用更多内存?

最佳答案

“string value or long value 哪个占用更多内存”

C# 中的字符串是 Unicode 字符(每个字符都是两个字节)+ 指向该地址的指针(最少 4 个字节,在 x64 .NET 应用程序上为 8 个字节)。

Long 为 8 个字节。一旦你在 x86 上超过 2 个字符,或者在 x64 上超过任何字符,你将占用比 long 更多的内存。

虽然字符串是不可变的,但如果您要发送大量相同大小的文件,字符串最终会消耗更少的内存。

对于您的实际问题,您应该使用 long 来真正表示底层对象。

编辑: 更正以考虑字符串的指针大小。

关于c# - 哪个占用更多内存,字符串值还是长值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10172259/

相关文章:

c# - 分析 word 文档中的文本 - 如何让它忽略书签?

c# - 同步融合图表问题

.net - 如何更改 DateTime 变量的时间?

vb.net - MurmurHash3 测试向量

c++ - UE4 C++ 将字符串转换为 double

c# - 什么是应用程序变量?我如何在 ASP.NET MVC 中声明应用程序变量?

c# - 使用 OleDb 将 DateTime 插入 Access 时遇到问题

c# - 如何在适用于 C# 的 Azure SDK 中使用仅获取 IList

对象数组的 VB.NET 语法

php - "Notice: Undefined variable"、 "Notice: Undefined index"、 "Warning: Undefined array key"和 "Notice: Undefined offset"使用 PHP