<?xml version='1.0' encoding="utf-8"?>
      <rss version='2.0'>
      <channel>
      <title>Форум на Исходниках.RU</title>
      <link>https://forum.sources.ru</link>
      <description>Форум на Исходниках.RU</description>
      <generator>Форум на Исходниках.RU</generator>
  	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=345501&amp;view=findpost&amp;p=3039426</guid>
        <pubDate>Tue, 06 Dec 2011 08:07:43 +0000</pubDate>
        <title>WebService &amp;amp; нестабильный &amp;quot;Out of Memory&amp;quot; при получении большого XML в ответ.</title>
        <link>https://forum.sources.ru/index.php?showtopic=345501&amp;view=findpost&amp;p=3039426</link>
        <description><![CDATA[Felan: Ну как бы это понятно. Хотелось официального подтверждения из документации о догадке про LOH. Во-первых. Во-вторых, я надеялся, что можно как-то настройками что-нибудь поправить.<br>
<br>
<div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=345501&view=findpost&p=3039253'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Mr.Delphist &#064; <time class="tag-quote__quoted-time" datetime="2011-12-06T00:58:52+04:00">05.12.11, 20:58</time></span><div class='quote '>P.S. Кстати, а на компакт-версии фреймворка есть IDisposable?</div></div><br>
Есть.]]></description>
        <author>Felan</author>
        <category>.NET: Compact Framework</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=345501&amp;view=findpost&amp;p=3039253</guid>
        <pubDate>Mon, 05 Dec 2011 20:58:52 +0000</pubDate>
        <title>WebService &amp;amp; нестабильный &amp;quot;Out of Memory&amp;quot; при получении большого XML в ответ.</title>
        <link>https://forum.sources.ru/index.php?showtopic=345501&amp;view=findpost&amp;p=3039253</link>
        <description><![CDATA[Mr.Delphist: <div class='tag-quote'><a class='tag-quote-link' href='https://forum.sources.ru/index.php?showtopic=345501&view=findpost&p=3030418'><span class='tag-quote-prefix'>Цитата</span></a> <span class='tag-quote__quote-info'>Felan &#064; <time class="tag-quote__quoted-time" datetime="2011-11-22T17:41:29+00:00">22.11.11, 17:41</time></span><div class='quote '>Че делать то???  :)  </div></div><br>
<br>
Чего-чего... Уменьшать размер сплошных кусков, требуемых для обслуги ответа веб-сервиса. Если есть такая возможность, конечно.<br>
Если код и/или протокол веб-сервиса менять нельзя, то можно попробовать поднять внешний прокси-сервис, который бы получал весь длинный XML от исходного сервиса, а мобильный клиент будет вытягивать данные on demand, по кусочку, в lazy-стиле. Цель - максимально избегать попадания в Large Heap, ибо с фрагментацией Вы уже столкнулись.<br>
<br>
P.S. Кстати, а на компакт-версии фреймворка есть IDisposable?]]></description>
        <author>Mr.Delphist</author>
        <category>.NET: Compact Framework</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=345501&amp;view=findpost&amp;p=3030418</guid>
        <pubDate>Tue, 22 Nov 2011 17:41:29 +0000</pubDate>
        <title>WebService &amp;amp; нестабильный &amp;quot;Out of Memory&amp;quot; при получении большого XML в ответ.</title>
        <link>https://forum.sources.ru/index.php?showtopic=345501&amp;view=findpost&amp;p=3030418</link>
        <description><![CDATA[Felan: Есть устройство, на WM 6.1 Classic. Есть еще одно устройство на WM 5.0. На них есть клиент, на .net cf 3.5. Этот клиент синхронизируется с сервером. На сервере WebService отдает данные, около 2MB.<br>
<br>
Периодически, на клиенте с WM6.1 возникает OutOfMemory примерно на 4-7 раз, а на клиенте с WM5.0 достаточно долго не возникает, но тоже есть.<br>
<br>
Метод веб-сервиса:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;[WebMethod(EnableSession = true)]</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public FormData GetFormData(int formId, byte[] clientHash)</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;return Common.GetFormData(Session.SessionID, formId, clientHash);</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;}</div><div class="code_line">&nbsp;</div><div class="code_line">...</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp;[Serializable]</div><div class="code_line">&nbsp;&nbsp; &nbsp;public class FormData</div><div class="code_line">&nbsp;&nbsp; &nbsp;{</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public byte[] HashCode { get; set; }</div><div class="code_line">&nbsp;</div><div class="code_line">&nbsp;&nbsp; &nbsp; &nbsp; &nbsp;public string DataXml { get; set; }</div><div class="code_line">&nbsp;&nbsp; &nbsp;}</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><br>
<br>
StackTrace из логов:<br>
<div class='tag-code'><span class='pre_code'></span><div class='code  code_collapsed ' title='Подсветка синтаксиса доступна зарегистрированным участникам Форума.' style=''><div><div><ol type="1"><div class="code_line">05:32:52.000 &nbsp; &nbsp; &nbsp; ERROR &nbsp;&#60;Censored&#62;.Mobile.Communication.Synchronizer :: System.OutOfMemoryException: OutOfMemoryException</div><div class="code_line">&nbsp;&nbsp; at System.String.Concat(String[] values)</div><div class="code_line">&nbsp;&nbsp; at System.String.Concat(String str0, String str1)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.XmlReader.ReadString()</div><div class="code_line">&nbsp;&nbsp; at System.Xml.XmlTextReader.ReadString()</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.DeserializePrimitiveElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean&amp; firstElement)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.DeserializeComplexElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean&amp; firstElement)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.DeserializeComplexElement(LogicalType deserializeAs, Accessor accessor, Fixup fixup, Object fixupTarget, String identifier, Boolean emptyValue, Boolean nullValue)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.deserializeElement(Accessor accessor, Fixup fixup, Object fixupTarget)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.DeserializeElementMember(MemberValueCollection members, Object fixupTarget, Hashtable internalState, Boolean&amp; firstElement)</div><div class="code_line">&nbsp;&nbsp; at System.Xml.Serialization.XmlSerializationReader.deserializeMembers(MemberValueCollection members, Object fixupTarget)</div><div class="code_line">&nbsp;&nbsp; at System.Web.Services.Protocols.SoapMessageParser.execute()</div><div class="code_line">&nbsp;&nbsp; at System.Web.Services.Protocols.SoapMessageSerializer.Deserialize(XmlReader reader, SoapHttpClientProtocol client, LogicalSoapMethod soapMethod, Boolean soap12)</div><div class="code_line">&nbsp;&nbsp; at System.Web.Services.Protocols.SoapHttpClientProtocol.doInvoke(String methodName, Object[] parameters, WebClientAsyncResult asyncResult)</div><div class="code_line">&nbsp;&nbsp; at System.Web.Services.Protocols.SoapHttpClientProtocol.Invoke(String methodName, Object[] parameters)</div><div class="code_line">&nbsp;&nbsp; at &#60;Censored&#62;.Mobile.Communication.Forms.FormService.GetFormData(Int32 formId, Byte[] clientHash)</div><div class="code_line">&nbsp;&nbsp; at &#60;Censored&#62;.Mobile.Communication.Synchronizer.LoadChanges(FormService service, FormInfo formInfo)</div><div class="code_line">&nbsp;&nbsp; at &#60;Censored&#62;.Mobile.Communication.Synchronizer.UpdateDataSet(FormService service, FormsSettings formSettings)</div><div class="code_line">&nbsp;&nbsp; at &#60;Censored&#62;.Mobile.Communication.Synchronizer.StartSync()</div></ol></div></div></div></div><br>
<br>
Получается, что OOM происходит когда данные еще даже не получены от веб-сервиса.<br>
<br>
После рытья инета появились подозрения, что потому, что данных больше чем 85К, получаемая строка, которая сохраняется в поле DataXml, располагается в LOH, а поскольку в LOH объекты не... ээээ... перемещаются, что бы устранить фрагментацию, то память потихоньку утекает и в итоге заканчивается.<br>
<br>
Это единственное объяснение, которое я смог придумать.<br>
<br>
Может кто чего получше посоветует?<br>
<br>
Как ловить утечку (если это вообще она) на устройстве че-то вообще даже представить себе не могу... на эмуляторе вроде пока воспроизвести не удалось... хотя и как на нем ловить тоже не представляю.<br>
<br>
Че делать то??? :)]]></description>
        <author>Felan</author>
        <category>.NET: Compact Framework</category>
      </item>
	
      </channel>
      </rss>
	