Использование памяти итераторов в C#

Наиболее разглашенное использование DataSets должно создать копию в оперативной памяти базы данных. Я нашел, что никогда не использовал его для этого, даже с.NET 1.0. Разъединенная модель была всегда несоответствующей в пользовательской среде.

при игнорировании реляционных баз данных в целом существует все еще использование для DataSets:

  • , Если Вы пишете приложение форм, которое должно загрузить и сохранить данные в файл, можно определить введенный DataSet, затем загрузить и сохранить их с помощью класса XmlDataDocument.

  • Crystal Reports может генерировать отчеты путем чтения DataSets в оперативной памяти. Можно создать введенный DataSet только для одного конкретного отчета и использовать язык.NET для записи сложной бизнес-логики для заполнения этого DataSet. Это сохраняет Вас от реализации бизнес-логики с помощью функциональности Crystal Reports (который может быть действительно трудной задачей)

  • , можно присоединить DataGridView к DataSet с одной строкой кода для получения дрянного пользовательского интерфейса, который, тем не менее, мог бы сделать задание, в котором Вы нуждаетесь. Хороший для вещей как внутренние инструменты тестирования. (Не достаточно хороший для поставки клиенту).

6
задан Tony the Pony 22 August 2009 в 11:14
поделиться

2 ответа

В большинстве случаев это просто недостаточно важно, чтобы о нем беспокоиться. Как указывает Эрик, могут быть некоторые случаи, когда это важно, но, по моему опыту, их довольно мало и далеко друг от друга.

Если вы выполняете сотни тысяч циклов foreach , вероятно, вы выполняете реальную работу внутри этих циклов. Это почти наверняка будет намного важнее самих итераторов.

Обратите внимание, что использование foreach над массивом (известным как массив во время компиляции, то есть) не В любом случае используйте IEnumerable - он использует прямую индексацию. Я бы не стал менять свой код на основании этого.

Как всегда, если вы ' Если вас беспокоит производительность, вам необходимо ее измерить и профилировать. Узкие места почти никогда не возникают там, где их ожидаешь.

14
ответ дан 8 December 2019 в 14:45
поделиться

Часто компилятор может оптимизировать цикл foreach в простой цикл, для которого требуется только индексная переменная в стеке (или в регистре процессора).

Если итератор все еще используется, большинство из них являются структурами, поэтому они просто размещаются в стеке, а не в куче.

Несколько итераторов, которые являются классами, все еще довольно маленькие и быстрые. Вы можете создать миллионы из них без заметного воздействия.

2
ответ дан 8 December 2019 в 14:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: