Mã bên dưới cực kỳ chậm đối với các bảng có kích thước đáng kể. (100, 1000, v.v.) Thủ phạm đang khởi tạo các đối tượng của tôi với new T()
. Lưu ý rằng đây không phải là mã hoàn thiện của tôi, tôi vừa chia nhỏ các phần của nó ra để dễ dàng hơn trong hồ sơ. Việc khởi tạo và khởi tạo sẽ xảy ra cùng nhau khi tôi tái cấu trúc lại mã.Làm thế nào tôi có thể tăng tốc độ khởi tạo một tập hợp các đối tượng lớn?
Có cách nào để tăng tốc độ này không? Tôi có thể quên một cái gì đó thật sự đơn giản, hoặc có lẽ tôi đang boned. Hy vọng rằng, trước đây.
public static IList<T> ToList<T>(this DataTable table) where T : Model, new()
{
T[] entities = new T[table.Rows.Count];
// THIS LOOP IS VERY VERY SLOW
for (int i = 0; i < table.Rows.Count; i++)
entities[i] = new T();
// THIS LOOP IS FAST
for (int i = 0; i < table.Rows.Count; i++)
entities[i].Init(table, table.Rows[i]);
return new List<T>(entities);
}
chỉnh sửa để biết thêm:
Các constructor của bất kỳ trao ModelType
sẽ trông như thế này:
public ModelType()
{
_modelInfo = new ModelTypeInfo();
}
Các constructor của bất kỳ ModelTypeInfo
được chỉ đơn giản là sẽ thiết lập một số chuỗi và string [] giá trị và công việc duy nhất của lớp đó là cung cấp các giá trị được đặt.
chỉnh sửa để biết nhiều hơn:
Kể từ khi nó có vẻ là một chủ đề nóng, đây là những gì phương pháp của tôi trông giống như đối với số thực trước khi phá vỡ xây dựng đối tượng và khởi tạo:
public static IList<T> ToList<T>(this DataTable table, ModelInfo modelInfo) where T : Model, new()
{
var tempRepository = new Repository<T>(modelInfo);
var list = new List<T>();
foreach (DataRow row in table.Rows)
list.Add(tempRepository.FromData(table, row));
return list;
}
tắt chủ đề: Tại sao bạn không chỉ cần tạo một 'Danh sách' ở nơi đầu tiên thay vì một 'T [] 'và sau đó biến chúng thành một danh sách? Ngoài ra, tại sao 'for' thay vì' foreach'? –
Svish
Trong thực tế, đó là * là những gì tôi làm. Tôi vừa phá mã xuống dưới dạng này cho mục đích minh họa. Bạn biết đấy, để cho biết mã đang ở đâu chậm, sử dụng ít ma thuật nhất có thể. –