有没有人知道更有效的方法来执行此代码:
public static float ConvertTrafficValues(double bytes, out string speedBytes)
{
if (bytes >= 1000000)
{
bytes /= 1000000;
bytes = Math.Round(bytes, 1);
speedBytes = "MB/s";
}
else if (bytes >= 1000)
{
bytes /= 1000;
bytes = Math.Round(bytes, 0);
speedBytes = "KB/s";
}
else
{
bytes = Math.Round(bytes, 0);
speedBytes = "B/s";
}
return (float)bytes;
}
我每秒都会多次调用这个以及其他一些东西,我需要它尽可能高效
答案 0 :(得分:0)
我根据this question的接受答案编码了以下解决方案:
private static readonly string[] s_Suffixes = { "B/s", "KB/s", "MB/s" };
public static Single ConvertTrafficValues(Double bytes, out String speedBytes)
{
if (bytes == 0.0d)
{
speedBytes = "B/s";
return 0.0f;
}
Int32 magnitude = (Int32)Math.Log(bytes, 1024.0d);
Double size;
if (magnitude >= (s_Suffixes.Length - 1))
{
magnitude = s_Suffixes.Length - 1;
size = bytes / Math.Pow(2.0d, magnitude * 10);
}
else
{
size = bytes / Math.Pow(2.0d, magnitude * 10);
if (Math.Round(size, 2) >= 1000.0d)
{
magnitude += 1;
size /= 1024.0d;
}
}
speedBytes = s_Suffixes[magnitude];
return (Single)size;
}
即使它涉及文件卷,基础逻辑也几乎相同。我将最大幅度限制为Mb
,因为这是您的方法所做的。我没有改变你的实现逻辑,因为你应该知道如何以及何时使用这个方法比我好。