更高效的字节转换? - Android Xamarin C#

时间:2018-01-05 22:27:23

标签: c# android xamarin type-conversion calculation

有没有人知道更有效的方法来执行此代码:

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;
    }

我每秒都会多次调用这个以及其他一些东西,我需要它尽可能高效

1 个答案:

答案 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,因为这是您的方法所做的。我没有改变你的实现逻辑,因为你应该知道如何以及何时使用这个方法比我好。