在我拥有的应用程序中,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);
Run Code Online (Sandbox Code Playgroud)
我不知道框架本身内有任何其他功能来改变除Convert.ChangeType函数之外的类型(显然是显式转换).
为此,我认为唯一的另一种改进方法是滚动自己的ChangeType功能,该功能专门针对您的特定情况进行了优化(如果可能).
你提到你正在使用有限数量的类型,也许你比其他类型更多地处理一种类型?如此,您的ChangeType功能可以优化以首先尝试此特定转换,并且只有在失败时才尝试其他转换.您提到尝试切换样式的代码块,并且可以将相同的方法(尝试最常用的Type)应用于此.至于它是否会更快将取决于您正在处理的数据(以及您要转换/转换的类型的频率/可变性),唯一真正的衡量方法是尝试并将其分析到与Convert.ChangeType方法论比较.
如果您正在寻找自己的功能,那么一个有趣的链接是在Peter Johnson的博客上:
Convert.ChangeType不处理nullables
请务必阅读该帖子的所有评论.
| 归档时间: |
|
| 查看次数: |
13772 次 |
| 最近记录: |