哪个需要更多内存,字符串值或长值?

Mur*_*sli 2 c# vb.net memory variables byte

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

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

我的问题:我应该值转换为string从格式WCF服务的应用程序,然后将其返回到客户端的string,或者我应该只返回大小为long价值,让客户将其转换为一个string格式

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

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

long large_size = 56371445760;
string large_size = "52.5 GB";
Run Code Online (Sandbox Code Playgroud)

更新:

我使用此方法将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");
        }
    }
Run Code Online (Sandbox Code Playgroud)

简短的问题:哪个需要更多的记忆,string价值或long价值?

M A*_*ifi 5

"这需要更多的内存,字符串值或长值"

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

长是8个字节.一旦你在x86上超过2个字符,或者x64上的任何字符,你将占用更多的内存而不是长.

字符串是不可变的,如果你发送大量符合规格的文件,字符串最终会占用更少的内存.

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

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

  • MEH; 一个零长度的字符串仍然需要一个引用 - 在x64上是8字节**就在那里**.然后是对象标题....字符串**总是**更大. (8认同)