سؤال

وأنا أحاول أن جعل طريقة عامة لنوع التحويلات التي يحصل كائن ونوع الكائن إلى أن المدلى بها.

وباستخدام 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. وهناك العمود الذي كتبته كما العشرية التي أريد أن يلقي لفترة طويلة. إذا كنت استدعاء هذا الأسلوب، فإنه يأخذ الكثير من الوقت للادلاء العشري لفترة طويلة.

وT نوع من هذا الأسلوب يمكن أن يكون نوع قيمة الوحيد. أعني "T: البنية"

هل كانت مفيدة؟

المحلول

ما زلت أشك المطالبات أدائك. وإليك الأدلة. ترجمة وتشغيل البرنامج أدناه (في الوضع الإفراج):

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));
    }
}

وهذا يستغرق 20 ثانية على جهاز الكمبيوتر المحمول - لتنفيذ 100،000،000 التكرار. من الصعب أن نصدق أن يستغرق 8 ثوان على جهاز الكمبيوتر الخاص بك لتنفيذ 40 تكرارات.

وبعبارة أخرى، أشك بقوة أن المشكلة ليست في المكان الذي أعتقد أنه هو.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top