Я знаю, что DataTable
использует бокс/распаковку, когда мы вставляем/получаем данные. Если у нас есть действительно большой объем данных, содержащих только int
, не быстрее ли использовать какой-то общий DataTable
, скажем MyDataTable<int>
, что приведет к недопущению накладных расходов на бокс/разборку?C# DataTable vs Некоторая общая производительность коллекции
ответ
Основная проблема, с которой вам придется иметь дело, состоит в том, что DataTable
может иметь любое количество столбцов, в которых каждый столбец может быть любого типа. Вы не можете обобщать его, сохраняя при этом разные типы для каждого столбца.
Один из способов избежать бокса - вместо использования DataTable
создать объект для представления каждой строки. Убедитесь, что объект имеет свойство для каждого столбца соответствующего типа. Затем вы можете работать с List
(или некоторой другой структурой данных) этих объектов.
Другой вариант, если у вас есть, например, целиком int
значения для ваших данных, было бы создание многомерного массива ints (int[,] mydata = new int[10000,5];
). Это также позволило бы избежать бокса целых чисел.
Строки являются ссылочными типами, поэтому нет накладных расходов на бокс: они никогда не помещаются в коробку. Однако у DataTable есть много накладных расходов - это затраты на возможность представления произвольных моделей столбцов наряду с ограничениями, отслеживанием изменений и т. Д. Для достижения оптимальной производительности модель POCO трудно превзойти. Например:
public class Customer {
public int Id { get; set; }
public string Name { get; set; }
// ...
}
Есть много ORMs и микро-ORMs, которые делают работу с этим типом модели.
Обратите внимание, что в DataTable значения хранятся в в правильно типизированных массивах. Инты хранятся в int [] - это происходит путем хранения данных в столбцах, а не в строках. Бокс происходит только при получении данных в/из DataTable.
- 1. Некоторая общая информация о сборке
- 2. .Net vs C++ (производительность)
- 3. Общая производительность SQL-запросов
- 4. Некоторая общая клавиатура больше не работает (Intellij)
- 5. DataTable vs Array performance in C#
- 6. Производительность Java 1.6 vs C++?
- 7. CUDA. Общая память vs Константа
- 8. DataTable производительность цикла
- 9. C# Производительность для прокси-сервера (vs C++)
- 10. Увеличение запроса Производительность в DataTable в C#
- 11. Редукционная форма и общая производительность
- 12. Общая производительность создания пользовательских элементов
- 13. Загрузка и общая производительность UIWebView
- 14. Производительность синтаксиса DataTable IN
- 15. Производительность: NaCl vs Emscripten
- 16. Сортировка объектов DataTable коллекции
- 17. DataTable для наблюдаемой коллекции
- 18. Производительность System.IO.File vs System.IO.FileStream
- 19. Производительность fopen vs stat
- 20. C# Parallel Vs. Производительность резьбового кода
- 21. String vs SecureString Производительность в C#?
- 22. Try-Catch vs Если производительность в C#
- 23. производительность Objective C NSArray Vs NSMutableArray
- 24. Swift vs Objective-C: Производительность приложения
- 25. map vs multimap in C++ (производительность)
- 26. C++ Pimpl vs Чистая производительность виртуального интерфейса
- 27. Производительность RegEx в Objective-C vs Python
- 28. Общая колонка в DataTable получает удвоенное значение
- 29. Javascript - Аргументы Vs Вложенные функции Vs Производительность
- 30. C++ threading vs. visibility issues - какая общая инженерная практика?