Вот некоторый код, который подробно останавливается на понятии @Samuel Kim наличия способа отключить ViewState на почти определенных средствах управления (btw, это использует.NET 3.5):
List<string> allowedControls = new List<string> { "Control1", "Control3" };
IEnumerable<Control> controlsWithoutViewState = Page.Controls.Where(c => !allowedControls.Contains(c.ID));
foreach(Control c controlsWithoutViewState){
if(c is WebControl) ((WebControl)c).EnableViewState = false;
}
единственная вещь я не на 100% уверен в (и у меня нет своего VM, работающего), то, ли Page. Средства управления должны быть брошены или нет, раз так просто иметь это вместо этого:
IEnumerable<Control> controlsWithoutViewState = Page.Controls.Cast<Control>().Where(c => !allowedControls.Contains(c.ID));
Вышеупомянутое является только быстрым понятием того, что сделать, это не принимает во внимание вложенные средства управления, где можно хотеть 1 с и 1 без ViewState, но не было бы трудно сделать рекурсивную функцию для обработки его.
Во-первых, большая часть этой болтовни «петли - это плохо» происходит из темных веков, когда петли были менее эффективно реализованы, в частности, в некоторых версиях S-Plus.
Тем не менее, и хотя ваш комментарий о необходимости в большом индексном объекте верен, вы также можете использовать
функции из семейства apply
, такие как sapply
, lapply
или tapply
, чтобы развернуть ваши структуры
относительно новый пакет итераторов , который также избегает большого вектора, который вы упомянули как ограничение памяти
, Ra 'ускоренный вариант R' и его jit-пакет , который может значительно ускорить простые циклы.
В качестве дополнительного бонуса,