Единица: Создайте словарь

Если Вы видите из памяти, рассматриваете, вероятно ли это: Вам действительно нужно так много памяти? Если не (т.е. когда у Вас нет огромных объектов и если Вы не должны создавать миллионы объектов по некоторым причинам), возможности состоят в том, что у Вас есть утечка памяти.

В Java, это означает, что Вы сохраняете ссылку на объект где-нибудь даже при том, что Вам больше не нужен он. Частые причины для этого забывают звонить близко () на ресурсах (файлы, соединения с БД, операторы и наборы результатов, и т.д.).

, Если Вы подозреваете утечку памяти, используйте профилировщика для нахождения, какой объект занимает всю доступную память.

6
задан Mauricio Scheffer 31 May 2011 в 17:36
поделиться

2 ответа

Я думаю, вам нужно использовать метод -элемент, чтобы заархивировать это. Это неприятно, но это обходной путь.

Ваш тип должен определять метод Add (строковый ключ, строковое значение), который контейнер Unity использует для вставки значений.

<method name="Add">
 <param name="key" parameterType="string">
  <value value="localHost"/>
 </param>
 <param name="value" parameterType="string">
  <value value="127.0.0.1"/>
 </param>
</method>

Unity определенно не поддерживает словари для конфигурации контейнера. См. Сборка словарей с использованием контейнера Unity?

6
ответ дан 11 December 2019 в 00:40
поделиться

Я обнаружил, что в Unity есть ошибки при работе с Generics ( http://unity.codeplex.com/Thread/View.aspx?ThreadId=30292 ), есть довольно уродливый обходной путь:

public class MyDictionary : Dictionary<string,string>{

    public MyDictionary() { 

    }
}

теперь в файле конфигурации:

        <typeAlias alias="string" type="System.String, mscorlib" />            
        <typeAlias alias="Dictionary" type="MyFakeNamespace.MyDictionary, MyFakeAppDll" />

...

, а затем с использованием предложения Jehof:

<type name="ConfigurationDictionary" type="Dictionary">
                    <typeConfig extensionType="Microsoft.Practices.Unity.Configuration.TypeInjectionElement, Microsoft.Practices.Unity.Configuration">
                        <method name="Add" key="0">
                            <param name="key" parameterType="string">
                                <value value="localHost"/>
                            </param>
                            <param name="value" parameterType="string">
                                <value value="127.0.0.1"/>
                            </param>
                        </method>
                        <method name="Add" key="1">
                            <param name="key" parameterType="string">
                                <value value="contentHost"/>
                            </param>
                            <param name="value" parameterType="string">
                                <value value="\\content"/>
                            </param>
                        </method>
                        <method name="Add" key="2">
                            <param name="key" parameterType="string">
                                <value value="virtualDir"/>
                            </param>
                            <param name="value" parameterType="string">
                                <value value="/"/>
                            </param>
                        </method>
                    </typeConfig>

                 </type>

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

Затем, когда ошибка будет устранена, небольшое изменение typeAlias ​​позволит нам указать правильный тип, но я думаю, что оставлю как есть.

1
ответ дан 11 December 2019 в 00:40
поделиться
Другие вопросы по тегам:

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