C# C语言中动态数据类型性能的不断切换#
第一个帖子在这里,请温柔 假设我们有一个假设的用例,在这个用例中我们需要一个动态的数据类型,它在几种类型之间不断地切换C# C语言中动态数据类型性能的不断切换#,c#,performance,dynamic,types,C#,Performance,Dynamic,Types,第一个帖子在这里,请温柔 假设我们有一个假设的用例,在这个用例中我们需要一个动态的数据类型,它在几种类型之间不断地切换 // Declare stuff const string dataString = "String"; const double dataDouble = 2.0; dynamic dynamicThing = dataString; var w = new Stopwatch(); // Measure performance of switching types onc
// 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个滴答声中实现了我所需要的功能。不过,我相信这可能还是太慢了
我是否遗漏了任何可能比使用dynamic更快的.NET Framework方法
请记住,这是一个不断处理切换的要求,因为如果只有一次切换,DLR将只缓存动态值,而且速度会非常快
感谢阅读。似乎如果使用值类型,最快的方法就是使用object和cast
object objectThing = dataString;
w.Restart();
objectThing = dataDouble;
double objectDouble = (double)objectThing;
objectThing = dataString;
string objectString = (string)objectThing;
w.Stop();
只有14个刻度。您是否可以发布更快的代码?而且,您的数据总是值类型和字符串吗?如果是这样的话,动态是一种严重的过度杀伤力,您可以对对象进行强制转换。您可以使用
object
和强制转换,而不是dynamic
。如果看不到您真正打算如何使用它,就很难提出一个满足您需求的解决方案,或者如果您甚至需要担心性能(99%的情况下您不需要担心)。@PaulSasik我愿意在对其进行广泛测试后将其发布到GitHub,对此我有点害羞。谢谢您的反馈。@TimS。我可能只是添加对象和铸造来进行比较。谢谢你的主意,我真傻,竟然忽略了这一点。