2014-12-03 70 views
3

首先发布在这里,请温柔。不断在C#中切换动态数据类型的性能#

比方说,我们有这个假设的用例,我们需要一个动态的数据类型,不断地在几种类型之间切换。

// Declare stuff 
const string dataString = "String"; 
const double dataDouble = 2.0; 
dynamic dynamicThing = dataString; 
var w = new Stopwatch(); 

// Measure performance of switching types once 
w.Start(); 
dynamicThing = dataDouble; 
double dynamicDouble = dynamicThing; 
dynamicThing = dataString; 
string dynamicString = dynamicThing; 
w.Stop(); 

在我的开发箱中,这个特定的例子钟约4936519个滴答声。我设法实现了我在25529 tick中所需要的功能。不过,我认为这可能还是太慢了。

我是否缺少任何其他.NET Framework方法,这可能会比使用动态更快?

请记住,它是一个不断处理切换的要求,因为如果切换一次,DLR只会缓存动态值,而且确实非常快。

感谢您的阅读。

+0

你还可以发布更快的代码吗?而且,你的数据总是成为价值类型和字符串?如果是这样,动态是严重的矫枉过正,你可以投到/从对象。 – 2014-12-03 20:11:43

+0

您可以使用'object'和casting来代替'dynamic'。没有看到你真正打算如何使用它,很难提出满足你需求的解决方案,或者甚至需要担心性能(99%的时间你不需要)。 – 2014-12-03 20:17:10

+0

@PaulSasik我在广泛测试之后愿意将它发布到GitHub上,我对此有点害羞。感谢您的反馈意见。 – 2014-12-03 20:17:40

回答

2

看来,如果使用值类型,最快的方法是使用对象和强制转换。

object objectThing = dataString; 
w.Restart(); 
objectThing = dataDouble; 
double objectDouble = (double)objectThing; 
objectThing = dataString; 
string objectString = (string)objectThing; 
w.Stop(); 

只有14个刻度。