将int转换为char的最快方法是什么? 我需要更快的方式,因为,
convertingchar = Convert.ToChar(intvalue);
是我在该计划中最慢的部分。 我有多个不同的int值,必须转换为char。 我的项目很大,我无法发布我的功能。这就是我发布此测试功能的原因。
我的代码到目前为止。
char convertingchar = ' ';
...some code...
public void convert(int intvalue){
convertingchar = Convert.ToChar(intvalue);
}
答案 0 :(得分:21)
在Convert.ToChar
方法和提到的转换方法之间运行quick performance test,我发现65535个测试(char.MaxValue
):
Convert: 00:00:00.0005447 total
Cast: 00:00:00.0003663 total
最好的情况是,在大约一半的转换时间,演员阵容正在为我而战。
Reference Source中Convert.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