我有一个连接到 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/