ホームページ >バックエンド開発 >C++ >.NETのジェネリックリストをDatatablesに効率的に変換するにはどうすればよいですか?

.NETのジェネリックリストをDatatablesに効率的に変換するにはどうすればよいですか?

Linda Hamilton
Linda Hamiltonオリジナル
2025-01-30 21:36:12673ブラウズ

datatable

.netでは、汎用リストまたは列挙されたオブジェクトをデータテーブルオブジェクトに変換する必要があるシーンに遭遇する可能性があります。静的な方法はありませんが、この変換を実行でき、複数の方法を使用できます。

fastmember

を使用します .NETフレームワーク4.5以下のバージョンでは、NUGETのFastMemberライブラリを使用できます。このライブラリは、高いパフォーマンスメタプログラミング関数を提供します:

reflection を使用します
<code class="language-csharp">using FastMember;
using System.Data;

IEnumerable<sometype> data = ...;
DataTable table = new DataTable();
using (var reader = ObjectReader.Create(data))
{
    table.Load(reader);
}</code>
.NETフレームワーク4.5の前に、反射を使用して、汎用リストからダイナミックにデータテーブルを作成できます。 fastmemberと比較して、これは低効率の方法です:

この関数は、任意の汎用リストを呼び出して、リストオブジェクト属性に基づいてデータテーブルを生成できます。

<code class="language-csharp">public static DataTable ToDataTable<T>(this IList<T> data)
{
    PropertyDescriptorCollection props = TypeDescriptor.GetProperties(typeof(T));
    DataTable table = new DataTable();
    for (int i = 0; i < props.Count; i++)
    {
        PropertyDescriptor prop = props[i];
        table.Columns.Add(prop.Name, prop.PropertyType);
    }
    foreach (T item in data)
    {
        DataRow row = table.NewRow();
        for (int i = 0; i < props.Count; i++)
        {
            row[i] = props[i].GetValue(item);
        }
        table.Rows.Add(row);
    }
    return table;
}</code>
パフォーマンスの注意事項

FastMemberメソッドは、反射方法よりもはるかに高速です。ただし、データのボリュームや列の数などの要因によってパフォーマンス特性が異なる場合があるため、Datatableのパフォーマンスには改善の余地があります。

以上が.NETのジェネリックリストをDatatablesに効率的に変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。