【问题标题】:Type Conversion in C#C#中的类型转换
【发布时间】:2010-09-23 23:41:55
【问题描述】:

我正在尝试为类型转换创建一个通用方法,该方法获取一个对象和要转换的对象类型。

通过使用Convert.ChangeType(),我可以做我想做的事,但运行时会花费太多时间。制作我想要的泛型类的最佳方法是什么。

我的旧代码是这样的;

public static ConvertTo<T>(object data) where T : struct // yes the worst variable name!
{
  // do some controls...

  return Convert.ChangeType(data, typeof(T));
}

编辑: 澄清一下……

例如;我已经执行了我的查询,它返回了一个 DataRow。并且有一列输入为十进制,我想将其转换为长。如果我调用此方法,则将十进制转换为 long 需要花费很多时间。

并且该方法的T类型只能是值类型。我的意思是“T:结构”

【问题讨论】:

  • 您能否更具体地说明“运行时需要太多时间”。您是否对其进行了分析以检查它是否是此代码?
  • 是的,我发现问题出在该代码中。 “运行时花费了太多时间”,我的意思是 40 次调用此方法总共需要 8 秒。
  • 40 次调用需要 8 秒?我觉得这很难相信,除非你有一些需要很长时间的自定义类型转换器。请提供一个简短但完整的示例程序。

标签: type-conversion casting


【解决方案1】:

我仍然怀疑您的性能声明。这里有证据。编译并运行以下程序(在发布模式下):

using System;
using System.Diagnostics;

class Test
{
    const int Iterations = 100000000;

    static void Main()
    {
        Stopwatch sw = Stopwatch.StartNew();
        decimal d = 1.0m;
        long total = 0;
        for (int i=0; i < Iterations; i++)
        {
            long x = ConvertTo<long>(d);
            total += x;
        }
        sw.Stop();
        Console.WriteLine("Time: {0}ms", sw.ElapsedMilliseconds);
        Console.WriteLine("Total: {0}", total);
    }

    public static T ConvertTo<T>(object data) where T : struct
    {
        return (T) Convert.ChangeType(data, typeof(T));
    }
}

在我的笔记本电脑上执行 100,000,000 次迭代需要 20 秒。很难相信在您的计算机上执行 40 次迭代需要 8 秒。

换句话说,我强烈怀疑问题不在你认为的地方。

【讨论】:

  • 实际上,我在另一台机器上看到了经过的时间,也许我错过了一些东西。当我尝试时,我没有花这么多时间。我会检查那台机器上的代码,我会马上回复你。
猜你喜欢
  • 2020-11-17
  • 1970-01-01
  • 2010-11-23
  • 1970-01-01
  • 2022-08-27
  • 2012-02-23
  • 2011-01-22
  • 1970-01-01
相关资源
最近更新 更多