将int转换为char的最快方法是什么?

时间:2015-03-13 10:03:15

标签: c# performance char int converter

将int转换为char的最快方法是什么? 我需要更快的方式,因为,

convertingchar = Convert.ToChar(intvalue);

是我在该计划中最慢的部分。 我有多个不同的int值,必须转换为char。 我的项目很大,我无法发布我的功能。这就是我发布此测试功能的原因。

我的代码到目前为止。

char convertingchar = ' ';
...some code...
public void convert(int intvalue){
   convertingchar = Convert.ToChar(intvalue);
}

3 个答案:

答案 0 :(得分:21)

Convert.ToChar方法和提到的转换方法之间运行quick performance test,我发现65535个测试(char.MaxValue):

Convert: 00:00:00.0005447 total
Cast:    00:00:00.0003663 total

最好的情况是,在大约一半的转换时间,演员阵容正在为我而战。

Reference SourceConvert.ToChar的实现揭示了时间消费者:

public static char ToChar(int value) {
    if (value < 0 || value > Char.MaxValue) throw new OverflowException(Environment.GetResourceString("Overflow_Char"));
    Contract.EndContractBlock();
    return (char)value;
}

虽然这些检查确实有用,但您的特定用例(尤其是在这种性能危急情况下)可能不需要它们。这取决于你。

执行这些检查的一个不错的选择是使用ushort而不是int。显然,可能会或可能不会达到,但具有相同的最大值,这意味着您将获得编译时检查以前的内容,具体取决于ToChar执行。

答案 1 :(得分:18)

Convert.ToChar最终会以(char)value执行显式转换,其中value是您的int值。在执行此操作之前,它会检查以确保值在0 to 0xffff范围内,如果不是,则会抛出OverflowException。额外的方法调用,值/边界检查和OverflowException可能很有用,但如果不是,如果只使用(char)value,性能会更好。

这将确保转换时一切正常,但确保这一点需要一些时间,

convertingchar = Convert.ToChar(intvalue);

这将转换它而不确定一切都好,所以更少的时间,

convertingchar = (char)intvalue;

例如。

 Console.WriteLine("(char)122 is {0}", (char)122);

的产率:

  

(char)122是z


注意

直接与问题无关,但如果您觉得转化速度很慢,那么您可能会做错事。问题是为什么需要将int的批次转换为char。你想要实现的目标。可能有更好的方法。

答案 2 :(得分:9)

与其他人注意到的最快的方法是不运行任何代码。在所有其他情况下,为int分配了内存,为char分配了内存。因此,可以实现的最佳效果就是将int复制到char地址。

然而,这段代码速度提高了100%,因为根本没有代码运行。

[StructLayout(LayoutKind.Explicit)]
public struct Foo
{
    [FieldOffset(0)] 
    public int Integer;
    [FieldOffset(0)] 
    public char Char;
}

https://msdn.microsoft.com/en-us/library/aa288471%28v=vs.71%29.aspx