Наиболее разглашенное использование DataSets должно создать копию в оперативной памяти базы данных. Я нашел, что никогда не использовал его для этого, даже с.NET 1.0. Разъединенная модель была всегда несоответствующей в пользовательской среде.
при игнорировании реляционных баз данных в целом существует все еще использование для DataSets:
, Если Вы пишете приложение форм, которое должно загрузить и сохранить данные в файл, можно определить введенный DataSet, затем загрузить и сохранить их с помощью класса XmlDataDocument.
Crystal Reports может генерировать отчеты путем чтения DataSets в оперативной памяти. Можно создать введенный DataSet только для одного конкретного отчета и использовать язык.NET для записи сложной бизнес-логики для заполнения этого DataSet. Это сохраняет Вас от реализации бизнес-логики с помощью функциональности Crystal Reports (который может быть действительно трудной задачей)
, можно присоединить DataGridView к DataSet с одной строкой кода для получения дрянного пользовательского интерфейса, который, тем не менее, мог бы сделать задание, в котором Вы нуждаетесь. Хороший для вещей как внутренние инструменты тестирования. (Не достаточно хороший для поставки клиенту).
В большинстве случаев это просто недостаточно важно, чтобы о нем беспокоиться. Как указывает Эрик, могут быть некоторые случаи, когда это важно, но, по моему опыту, их довольно мало и далеко друг от друга.
Если вы выполняете сотни тысяч циклов foreach
, вероятно, вы выполняете реальную работу внутри этих циклов. Это почти наверняка будет намного важнее самих итераторов.
Обратите внимание, что использование foreach
над массивом (известным как массив во время компиляции, то есть) не В любом случае используйте IEnumerable
- он использует прямую индексацию. Я бы не стал менять свой код на основании этого.
Как всегда, если вы ' Если вас беспокоит производительность, вам необходимо ее измерить и профилировать. Узкие места почти никогда не возникают там, где их ожидаешь.
Часто компилятор может оптимизировать цикл foreach в простой цикл, для которого требуется только индексная переменная в стеке (или в регистре процессора).
Если итератор все еще используется, большинство из них являются структурами, поэтому они просто размещаются в стеке, а не в куче.
Несколько итераторов, которые являются классами, все еще довольно маленькие и быстрые. Вы можете создать миллионы из них без заметного воздействия.