gpt4 book ai didi

c# - Convert.ChangeType 的更快版本

转载 作者:可可西里 更新时间:2023-11-01 08:44:00 27 4
gpt4 key购买 nike

在我的应用程序中,我经常调用 Convert.ChangeType 以将值转换为动态加载的类型。

但是,在使用 ANTS 进行分析后,我发现此 Convert.ChangeType 似乎需要花费大量时间(由于被频繁调用)。有没有人有比这更快的替代方法?

此时我有一个包含目标的类型对象,以及一个包含值的 string

以下是有问题的代码。我正在考虑对类型执行 switch 语句(因为它是类型的有限集合)并调用解析方法,尽管我不确定这是否会更快。

if(attributeRow["Value"]!=DBNull.Value)
sample[attr] = attr.AttributeType == typeof(Guid)
? new Guid(attributeRow["Value"].ToString())
: (IComparable)Convert.ChangeType(attributeRow["Value"],attr.AttributeType);

最佳答案

除了 Convert.ChangeType 函数(显然还有显式转换)之外,我不知道框架本身用于更改类型的任何其他功能。

为此,我认为唯一的其他改进方法是推出您自己的 ChangeType 函数,该函数专门针对您的特定情况(如果可能)进行了优化。

您提到您正在使用有限数量的类型,也许您处理的一种类型多于其他类型?因此,您的 ChangeType 函数可以优化为首先尝试此特定转换,只有在失败时才尝试其他转换。您提到尝试使用开关样式的代码块,并且可以将相同的方法(首先尝试最常用的类型)应用于该代码块。至于它是否会更快取决于您正在处理的数据(以及您正在转换为/来自的类型的频率/可变性)并且衡量这一点的唯一真正方法是尝试它并对其进行分析与 Convert.ChangeType 方法的比较。

如果您希望推出自己的功能,一个有趣的链接位于 Peter Johnson 的博客上:

Convert.ChangeType doesn't handle nullables

请务必阅读帖子的所有评论。

关于c# - Convert.ChangeType 的更快版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1532197/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com