Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/278.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# C语言中动态数据类型性能的不断切换#_C#_Performance_Dynamic_Types - Fatal编程技术网

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。我可能只是添加对象和铸造来进行比较。谢谢你的主意,我真傻,竟然忽略了这一点。