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价值?
"这需要更多的内存,字符串值或长值"
C#中的字符串是unicode字符(每个字符是两个字节)+指向该地址的指针(x64 .net应用程序上最少4个字节,8个字节).
长是8个字节.一旦你在x86上超过2个字符,或者x64上的任何字符,你将占用更多的内存而不是长.
字符串是不可变的,如果你发送大量符合规格的文件,字符串最终会占用更少的内存.
对于您的实际问题,您应该使用long来真正表示底层对象.
编辑:已更正以考虑字符串的指针大小.