Иногда я использую блоки без имени для изоляции изменяемых вещей, должен был подготовить некоторую неизменную вещь. Вместо того, чтобы иметь маркировку я подверг Блок неизменному объявлению переменной.
final String example;
{
final StringBuilder sb = new StringBuilder();
for(int i = 0; i < 100; i++)
sb.append(i);
example = sb.toString();
}
, Когда я нахожу некоторое другое использование для блока, или просто думаю, что это находится в пути, я превращаю его в метод.
К сожалению, я знаю только об одном варианте и о другом, работа над которым может стать очень болезненной.
Но он делает только то, что вы хотите, так что он работает максимально быстро.
Удачи.
Еще один вариант - агрессивно отключить ViewState для всех элементов управления, которые не затрагиваются при обратных передачах на стороне сервера.
You can partially customize your serialization by implementing ISerializable
. If you do this for the worst offenders, you won't increase maintenance as much but will still get some of the speedup.
Существует стороннее решение: как вы, 20-40 раз.
Это устраняет отражение, которое является причиной замедление, но для списков он поддерживает только несколько собственных типов. Так что для Genreric.List ваших собственных типов необходимо явный код где-нибудь или другой. Например, явные циклы или что-то более умное, что автоматизирует это. В любом случае это довольно просто и не должно быть помехой для огромных преимущества.
Мы столкнулись с похожими проблемами и разработали несколько способов повышения производительности. Некоторые из них мы используем в нашем продукте отображения памяти Persistore (в настоящее время бета). В нашем случае мы можем просто получить доступ к сохраненным данным «на месте», потому что они всегда находятся в куче с отображением памяти.
Однако одна «хитрость» состоит в том, чтобы определить данные состояния сеанса (если возможно) как маршалируемые ] class / struct и «сериализовать», которые используют поддержку маршалинга .NET, это может быть действительно очень быстро, но не будет обрабатывать «объектные» графы.
Мы также поддерживаем особую стойкость, основанную на двоичной сериализации, но мы также извлекаем и сохранять метаданные, чтобы управляемый код мог устанавливать / получать поля в сохраняемых данных в памяти во время выполнения без необходимости десериализации всего объекта, это полезно в некоторых настройках (например, g обновления цен на ценные бумаги и акции и т. д.). Наша последняя бета-версия поддерживает сериализацию по сети анонимных типов LINQ , это первая, насколько мне известно.
В любом случае, мы были бы заинтересованы в новых клиентах бета-версии, которые продвигают Проблемы с ASP.NET и веб-производительностью, наша последняя бета-версия очень впечатляет (но не готова до следующей недели).
Если кому-то интересно, просто свяжитесь с нами для получения последней информации о продукте.
Хью Моран
PS : Веб-сайт устарел, продукт выходит далеко за рамки описанного на нем.