Почему строка считает изменение так от D2007 до D2010?

Наше приложение на работе является огромным проектом с более чем 3 000 единиц, взвешиваясь приблизительно 3,5 миллиона строк кода.

... или по крайней мере это было, когда мы компилировали его под D2007. Мы недавно обновили к D2010, и теперь если мы выполняем полную сборку, количество строки наконец останавливается приблизительно в 4,9 миллионах. Тот же DPR, та же кодовая база, то же все, но компилятор, так или иначе работающий на основе приблизительно на 40% большего количества строк кода в цикле сборки и никто здесь не знает почему.

Только для создания вещей более сбивающими с толку, после здания, мы можем перейти к Проекту-> информация в IDE, и это сообщает 3.8M строки. В D2007 диалоговом окне компилятора и Проекте-> информационное диалоговое окно сообщило о том же числе.

У кого-либо есть какая-либо идея, что продолжается здесь?

9
задан Mason Wheeler 2 February 2010 в 23:10
поделиться

4 ответа

Я думаю, что это помогает больше, если вы видите своими глазами, что на самом деле это может быть сделано полностью без скриптов.

Вот 1 на 1 перезаписи с помощью среди прочих JSTL (просто drop jstl-1.2.jar в /WEB-INF/lib ) core и functions tallib:

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<html>
<head>
  <title>My Events - <decorator:title /></title>
  <link href="${pageContext.request.contextPath}/assets/styles.css" rel="stylesheet" type="text/css" />
</head>
<body>

<div class="tabs">
  <a 
    ${fn:contains(pageContext.request.requestURI, '/events/') ? 'class="selected"' : ''}
    href="${pageContext.request.contextPath}/events/Listing.action">Events</a>
  <a 
    ${fn:contains(pageContext.request.requestURI, '/people/') ? 'class="selected"' : ''}
    href="${pageContext.request.contextPath}/people/Listing.action">People</a>
</div>

<div class="submenu">
  <c:if test="${fn:contains(pageContext.request.requestURI, '/events/')}">
    <a href="Listing.action">List of Events</a>
    |<a href="New.action">New Event</a>
  </c:if>
  <c:if test="${fn:contains(pageContext.request.requestURI, '/people/')}">
    <a href="Listing.action">List of People</a>
    |<a href="New.action">New Person</a>
  </c:if>
  &nbsp;
</div>

Вот более оптимизированная перезапись, обратите внимание, что я использовал c: Набор для «кэширования» результатов выражения для повторного использования и что я использую HTML < base > тэгов, чтобы избежать размещения пути контекста в каждой ссылке (просто сделайте все относительные URL-адреса на вашей веб-странице относительно нее - без ведущей косой черты!):

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>

<c:set var="isEvents" value="${fn:contains(pageContext.request.requestURI, '/events/')}" />
<c:set var="isPeople" value="${fn:contains(pageContext.request.requestURI, '/people/')}" />

<html>
<head>
  <title>My Events - <decorator:title /></title>
  <base href="${pageContext.request.contextPath}">
  <link href="assets/styles.css" rel="stylesheet" type="text/css" />
</head>
<body>

<div class="tabs">
  <a ${isEvents ? 'class="selected"' : ''} href="events/Listing.action">Events</a>
  <a ${isPeople ? 'class="selected"' : ''} href="people/Listing.action">People</a>
</div>

<div class="submenu">
  <c:if test="${isEvents}">
    <a href="Listing.action">List of Events</a>|<a href="New.action">New Event</a>
  </c:if>
  <c:if test="${isPeople}">
    <a href="Listing.action">List of People</a>|<a href="New.action">New Person</a>
  </c:if>
  &nbsp;
</div>

Его можно оптимизировать больше, если собрать все «жестко закодированные» значения, такие как события и люди и ссылка тексты в карте в области приложения и использовать под каждым JSTL < c: forEach > для отображения вкладок.

Что касается фактического вопроса , можно отключить сценарии (и получить ошибки выполнения об их использовании), добавив следующую запись в webapp web.xml . Это может помочь заметить наблюдаемые скрипты.

<jsp-config>
    <jsp-property-group>
        <url-pattern>*.jsp</url-pattern>
        <scripting-invalid>true</scripting-invalid>
    </jsp-property-group>
</jsp-config>

Для получения дополнительной информации об EL обратитесь к учебнику Java EE, часть II, глава 5 . Неявные объекты EL, такие как $ {pageContext} , описаны здесь . Для получения дополнительной информации о JSTL обратитесь к учебнику Java EE, часть II, глава 7 . Обратите внимание, что JSTL и EL - это две отдельные вещи. JSTL - это стандартный tallib , и EL позволяет просто осуществлять программный доступ к внутренним данным. Хотя он обычно используется в tallbs, как JSTL, он также может использоваться автономно в тексте шаблона.

-121--2526265-

Вы должны знать общие принципы этих алгоритмов, потому что они являются основами программирования, и это даст вам представление о том, где они должны использоваться. Например, вы должны понимать быстро сортировать достаточно хорошо, чтобы понять, почему это может быть O (N ^ 2) в патологических случаях.

Однако нет абсолютно никакого смысла запоминать достаточно подробностей, чтобы иметь возможность кодировать реализации качества производства этих алгоритмов на первом опробовании верхней части головы. Именно для этого и нужны библиотеки. Например, если все, что вы помните, это каноническая 3-строчная версия быстрой сортировки, и вы не можете вспомнить, как реализовать один, который не легко найти О (N ^ 2) случаев и сортов на месте, в этом нет ничего плохого.

-121--2402960-

Интересно, возвращается ли обработка linefeeds/carriage, чтобы определить число строк в области выполнения компилятора, каким-то образом становится недостойным в результате внутренних устройств Юникода.

Пробовали ли вы компилировать в D2009 и видеть ли это проявляет такое же странное поведение?

0
ответ дан 5 December 2019 в 02:07
поделиться

Есть ли у вас основания ожидать, что ваша куча будет медленно расти в размере? Похоже, что по обоим следам он растет. Одна вещь, которую я сделал много раз, это уменьшить мою кучу, чтобы попытаться сделать проблему хуже. Однако 256M идет о нижней границе для Скалы.

Одна вещь, которую я заметил ранее, это то, что если у вас есть недолгие предметы, которые делают его из поколения эдема из-за слишком большого давления, это может постепенно убить вас. Это может произойти, когда есть всплеск активности (может быть, у вас всплеск утром?), и ваше пространство eden недостаточно велико. Скала в целом и актеры в частности интенсивно используют небольшие недолговечные предметы, и кажется, что есть этот волшебный порог, что как только вы пересекаете его, он все вниз по холму. Так что одна пробежка будет в порядке, и следующие аварии и ожоги.

Другое, что я заметил ранее, это то, что настройки GC, которые хорошо работают на OSX/x86, часто плохо работают на Sparc/Solaris и наоборот. Если вы находитесь в CoolThreads, я предлагаю настроить GC так, чтобы в планировщике/пуле был один поток GC на поток.

Что приводит к другому - убедитесь, что планировщик не создает новые потоки волей-неволей. Иногда так и будет. Я бы сказал, что вы должны почти всегда вручную устанавливать колпачок на резьбе. Я не знаю, насколько это актуально, но интересный факт о планировщике форк-соединения, который актеры используют по умолчанию, заключается в том, что он предназначен для коротких задач, связанных с ЦП. Выполнение ввода-вывода в потоках, которыми он управляет, завинчивает свои предположения. Конечно, это все еще должно сработать, но...

Удачи! Я потерял много-много дней своей жизни из-за таких проблем.

Посмотрите на некоторые опции здесь: http://java.sun.com/performance/reference/whitepapers/tuning.html

Похоже, вы используете коллектор параллельного сдвига. Попробуйте установить:

-XX:+UseParallelGC
-121--3404083-

Похоже, что пользовательские действия нарушены и неправильно обрабатываются отсутствующие ресурсы.

Каким образом ЦС будет его обрабатывать, если пользователь вручную удалит файлы? Что произойдет, если пользователь удалит папку приложения, а затем попытается удалить ее через ARP?

Что произойдет, если пользователь просто удалит компонент без удаления всего приложения? Вам будет лучше в долгосрочной перспективе починить ЦА.

-121--3909723-

Может ли это быть потому, что это более агрессивно с вложением?

0
ответ дан 5 December 2019 в 02:07
поделиться

Разве D2010 не поддерживает дженерики? Я думаю, что некоторые из библиотек были заменены на общие, которые могли бы учитывать дополнительные строки, которые кажутся анализируемыми, если он считает «виртуальные» строки, которые он использует.

1
ответ дан 5 December 2019 в 02:07
поделиться

Похоже, это ошибка. Правильный номер строки все еще указывается в разделе Project | Information. Смотрите ответ Ника на похожий вопрос .

1
ответ дан 5 December 2019 в 02:07
поделиться
Другие вопросы по тегам:

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