Rumah >pembangunan bahagian belakang >C++ >Bagaimana cara menukar senarai generik dengan cekap ke data dalam C#?
memanfaatkan fastmember untuk kelajuan
alternatif pra -.net 3.5: Refleksi dan Hyperdescriptor
<code class="language-csharp">IEnumerable<sometype> data = ...; DataTable table = new DataTable(); using(var reader = ObjectReader.Create(data)) { table.Load(reader); }</code>Sebelum .NET 3.5, pemaju bergantung pada refleksi atau hyperdescriptor (tersedia dalam .net 2.0):
Pengoptimuman Prestasi: Hyperdescriptor
<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>Untuk memaksimumkan prestasi, membolehkan Hyperdescriptor untuk jenis objek adalah penting. Ujian penanda aras mendedahkan penambahbaikan kelajuan yang besar:
Kaedah Standard: 27179 ms
Atas ialah kandungan terperinci Bagaimana cara menukar senarai generik dengan cekap ke data dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!