<?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=2142&amp;view=findpost&amp;p=34326</guid>
        <pubDate>Thu, 14 Aug 2003 08:51:43 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34326</link>
        <description><![CDATA[andrey: Точно также - забить в указатель NULL. Тогда ссылок не неё не бедет, а при закрытии она удалится. Чтобы вовремя вызвать GC.Collect() можно подчепится к событию формы (ДО забивания NULLом)]]></description>
        <author>andrey</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34323</guid>
        <pubDate>Thu, 14 Aug 2003 04:50:18 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34323</link>
        <description><![CDATA[gae: Проблема более менее решилась, когда я сделал форму модальной. Тогда все просто:<br>сразу после отработки формы убиваю ее и вызываю GC.<br><br>Imports &nbsp;System.GC<br><br> &nbsp; &nbsp; &nbsp; &nbsp;frmSelSSP.ShowDialog()<br> &nbsp; &nbsp; &nbsp; &nbsp;frmSelSSP = Nothing<br> &nbsp; &nbsp; &nbsp; &nbsp;Collect()<br> &nbsp; &nbsp; &nbsp; &nbsp;WaitForPendingFinalizers()<br> &nbsp; &nbsp; &nbsp; &nbsp;Collect()<br><br>А как тогда поступать, если форма не модальна? Если это MDIChild к примеру?]]></description>
        <author>gae</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34320</guid>
        <pubDate>Wed, 13 Aug 2003 20:56:37 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34320</link>
        <description><![CDATA[andrey: Ну если очень хочется поменьше оперативки, то не используй динамические структуры, DataSet и DataTable, каждой таблице сопоставь класс (запись в таблице) и коллекцию этих классов. Тогда размер будет поменьше, зато работы поболее.<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">&#60;br&#62;CREATE TABLE TestTab(&#60;br&#62;ID int primary key,&#60;br&#62;fld1 varchar(100),&#60;br&#62;....&#60;br&#62;)&#60;br&#62;</div></ol></div></div></div></div><script>preloadCodeButtons('1');</script><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">&#60;br&#62;internal class TestTabRecord{&#60;br&#62;public int ID;&#60;br&#62;public string fld1;&#60;br&#62;....&#60;br&#62;}&#60;br&#62;internal class TestTabRecorCollection:CollectionBase {..}//генерится генератором коллекций из .NET Fw SDK, где то на форуме я писал где его искать&#60;br&#62;</div></ol></div></div></div></div><br>Потом читаем таблицу с помощью DataReader и заполняем коллекцию.<br>Дальше всё работает также как и с DataTable, только нельзя связать контролы с даннми в IDE, придётся делать в коде.<br>НО!!!! DataReader ОБЯЗАТЕЛЬНО нужно закрывать как можно раньше, так как он эксклюзивно захватывает Connection.]]></description>
        <author>andrey</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34317</guid>
        <pubDate>Wed, 13 Aug 2003 20:54:39 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34317</link>
        <description><![CDATA[kl: Согласен с andrey.<br>Это общее явление для GC-платформ. Твой коллект - всего лишь инициация процесса, но не гарантия того что память будет освобождена. А сборщик ее освобождает не тогда когда ее &quot;много занято&quot;, а когда он считает, что &quot;ее стало не хватать&quot;. Вообще алгоритм сборки мусора в НЕТ значительно сложнее и по многим оценкам эффективней чем в Яве. Майкрософт им дорожит настолько, что даже в CLI включила сильно упрощенный вариант. Достаточно немало о нем можно прочитать в книге Рихтера.]]></description>
        <author>kl</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34314</guid>
        <pubDate>Wed, 13 Aug 2003 20:42:49 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34314</link>
        <description><![CDATA[andrey: Это &quot;нормально&quot;]]></description>
        <author>andrey</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34311</guid>
        <pubDate>Wed, 13 Aug 2003 01:15:54 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34311</link>
        <description><![CDATA[gae: До нажатия 1 батона прога занимает 9 метров. После - 70. &quot;Form2.mdb&quot; весит 25 метров.<br>Там 6 таблиц, в таблице SSP 30 тыс. записей.]]></description>
        <author>gae</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34308</guid>
        <pubDate>Tue, 12 Aug 2003 21:01:13 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34308</link>
        <description><![CDATA[andrey: Она занимает 70М памяти до нажатия &nbsp;1 батона? Если да, то я не знаю в чём дело. Если нет, то какой объём загружаемых данных?]]></description>
        <author>andrey</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34305</guid>
        <pubDate>Tue, 12 Aug 2003 09:58:46 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34305</link>
        <description><![CDATA[gae: Делаю совсем просто: две формы. На form2 один батон, нажали - открылась form1. На form1 две кнопки: батон1 и батон2. Батон1 - открываем БД, выводим в датагрид; батон2 - Kill Them All !!!<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">&#60;br&#62;Imports System.GC&#60;br&#62;Public Class Form2&#60;br&#62; &nbsp; &nbsp;Inherits System.Windows.Forms.Form&#60;br&#62;&#60;br&#62; &nbsp; &nbsp;Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Dim rrr As New Form1()&#60;br&#62;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;rrr.ShowDialog()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;rrr.Dispose()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Collect()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;WaitForPendingFinalizers()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Collect()&#60;br&#62; &nbsp; &nbsp;End Sub&#60;br&#62;End Class&#60;br&#62;</div></ol></div></div></div></div><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">&#60;br&#62;mports System.Data.OleDb, System.GC&#60;br&#62;Public Class Form1&#60;br&#62; &nbsp; &nbsp;Inherits System.Windows.Forms.Form&#60;br&#62;&#60;br&#62; &nbsp; &nbsp;Public strConn, sSQL, srcFile As String&#60;br&#62; &nbsp; &nbsp;Public Comm As OleDbCommand&#60;br&#62; &nbsp; &nbsp;Public ds As DataSet&#60;br&#62; &nbsp; &nbsp;Public Conn As OleDbConnection&#60;br&#62; &nbsp; &nbsp;Public Ad As OleDbDataAdapter&#60;br&#62;Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click&#60;br&#62;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Dim q As Long&#60;br&#62;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;ds = New DataSet()&#60;br&#62;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;DataGrid1.DataSource = ds &#39;Контрол Grid связываем с объектом DataSet&#60;br&#62;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;sSQL = &quot;SELECT * FROM SSP&quot;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;srcFile = &quot;form2.mdb&quot;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Try&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;&#39;Создаём и открываем соединение&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Conn = New OleDbConnection()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Conn.ConnectionString = &quot;Provider=Microsoft.Jet.OLEDB.4.0;Data Source=&#39;&quot; &amp; srcFile &amp; &quot;&#39;&quot;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Conn.Open()&#60;br&#62;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Comm = New OleDbCommand(sSQL, Conn) &#39;Создаём команду выборки данных&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Comm.Connection = Conn &#39;Указываем команде нужное соединение&#60;br&#62;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ad = New OleDbDataAdapter() &#39;Создаём адаптер данных&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ad.SelectCommand = Comm &#39;Указываем команду выборки данных&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Ad.Fill(ds, &quot;SSP&quot;) &#39;Заполняем DataSet. &#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;DataGrid1.DataMember = ds.Tables(&quot;SSP&quot;).TableName&#60;br&#62;&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Conn.Close()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Catch ex As Exception&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;MsgBox(&quot;Тип ошибки: &quot; &amp; ex.GetType.FullName &amp; vbCrLf &amp; ex.Message)&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;End Try&#60;br&#62; &nbsp; &nbsp;End Sub&#60;br&#62;&#60;br&#62; &nbsp; &nbsp;Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Close()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Conn.Dispose()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Comm.Dispose()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;ds.Clear()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Conn = Nothing&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Comm = Nothing&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;ds = Nothing&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;DataGrid1.Dispose()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Collect()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;WaitForPendingFinalizers()&#60;br&#62; &nbsp; &nbsp; &nbsp; &nbsp;Collect()&#60;br&#62; &nbsp; &nbsp;End Sub&#60;br&#62;End Class&#60;br&#62;</div></ol></div></div></div></div><br><br>Нажимаем батон1, потом батон2. Прога как занимала 70 метров в памяти, так и занимает!!!<br> ???]]></description>
        <author>gae</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34302</guid>
        <pubDate>Tue, 12 Aug 2003 04:54:16 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34302</link>
        <description><![CDATA[gae: У кого-нить есть пример работы с GC. Я вызвал q = GetTotalMemory(1) и он мне вернул 38'094'980 байт. Попробовал Collect() - память не освободилась. Пробовал даже так: <br><br>Conn.Close() <br>Conn.Dispose() <br>Comm.Dispose() <br>ds.Dispose() <br>Conn = Nothing <br>Comm = Nothing <br>ds = Nothing <br>q = GetTotalMemory(1) <br>Collect() <br><br>- с тем же результатом. Время впадать а отчаянье. А не хотелось бы.]]></description>
        <author>gae</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34299</guid>
        <pubDate>Mon, 11 Aug 2003 06:32:13 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34299</link>
        <description><![CDATA[kl: <div class='tag-quote'><span class='tag-quote-prefix'>Цитата</span> <span class='tag-quote__quote-info'>Леший, 11.08.03, 07:47:08</span><div class='quote '>Глобальный датасет это пожалуй true. Тогда встречный вопрос: как (где?) в VB.NET объявить глобальную переменную? Такую, чтоб не внутри какого-то класса, а поверх всех, МЕГАглобальную. Ведь, как я понимаю, если я просто объявлю ее в каком-либо классе как Public, и потом в какой-то другой форме буду создавать объект того класса, то это ничего не решит, т.к. это будут разные объекты. А создавать связь между формами шибко геморройно. Или я чего-то недопонимаю?</div></div><br>В .NET все должно быть внутри классов. Если ты хочешь чтобы переменная была одна на все экземпляры - объяви ее как Static.]]></description>
        <author>kl</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34296</guid>
        <pubDate>Mon, 11 Aug 2003 03:47:08 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34296</link>
        <description><![CDATA[gae: Глобальный датасет это пожалуй true. Тогда встречный вопрос: как (где?) в VB.NET объявить глобальную переменную? Такую, чтоб не внутри какого-то класса, а поверх всех, МЕГАглобальную. Ведь, как я понимаю, если я просто объявлю ее в каком-либо классе как Public, и потом в какой-то другой форме буду создавать объект того класса, то это ничего не решит, т.к. это будут разные объекты. А создавать связь между формами шибко геморройно. Или я чего-то недопонимаю?]]></description>
        <author>gae</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34293</guid>
        <pubDate>Fri, 08 Aug 2003 23:42:59 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34293</link>
        <description><![CDATA[andrey: 1) Сколько датасетов? 3-4? Дарагой! Так нельзя - датасет уж очень охоч до памяти! + его обслуга (DataAdapters, Commands). Вобщем так, сделай 1 глобальный датасет, всё же меньше жрать будет. Заполни его в начале отдельными DataAdapter, которые сразу уничтож (либо using, либо .Dispose()). Update по необходимости, с помощью своих DA.<br>После начально инициализации полезен garbage collect.<br>2)А как ты с ними работаешь? Если прочитал при запуске программы, записал при выходе, то закрывай на время работы, иначе смотри сам. Но если коннект закрыт и сделать DataAdapter.Fill, Update &nbsp;то коннект откроется на время вызова, а потом закроется - а это классная пожиралка всех ресурсов. Поэтому, если выполняется несколько Fill/Update подряд, то коннект надо открыть до и закрыть после всех.<br>3)см 1.<br><br>Я делаю как описал в п. 1. Прога с таким датасетом (там данные из БД примерно равной по размеру структуры и данных Northwind) занимает в памяти 25М при запуске. Если открыть штук пять форм (разных классов) то будет около 100М, итд. Никто не жалуется, все равно всё ненужное в своп уходит :)<br><br>Кстати set ... = nothing по-моему ничего не даёт, это как в с++<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">&#60;br&#62;char *s=new char[1000];&#60;br&#62;s=NULL;//это и есть nothing&#60;br&#62;//detected memory leaks! :)&#60;br&#62;</div></ol></div></div></div></div><br>но точно сказать не могу, так как с VB мало работал]]></description>
        <author>andrey</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      <item>
        <guid isPermaLink='true'>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34290</guid>
        <pubDate>Fri, 08 Aug 2003 04:00:47 +0000</pubDate>
        <title>Куда ушла память?</title>
        <link>https://forum.sources.ru/index.php?showtopic=2142&amp;view=findpost&amp;p=34290</link>
        <description><![CDATA[gae: Господа! Так случилось, что волею судьбы (а точнее сказать по желанию начальства) я теперь пишу на vb.net. Поскольку с Basic'ом и OLE DB я до не давнего времени не сталкивался вообще, кое-что у меня, конечно, выходит криво. &nbsp;Теперь собственно сам сабж: пишу милую прогу на vb.net для БД Access. Кучка форм, OLE DB, пара-тройка датасетов, которые создаются и заполняются программно. Все чинно, мило и что самое интересное - ВСЕ РАБОТАЕТ!!! Но! Недавно в диспетчере задач обратил внимание на количество памяти, которую жрет моя прога. Оказалось - всего ничего - около100 Mb. Тут я, конечно, слегка расстроился, а потому решил спросить совета у бывалых джедаев. Дело в том, что я как доверчивый чукотский юноша в своей проге ничего(коннекшн, датасет и т.п.) не закрываю (кроме форм) и не убиваю (я имею в виду vb-шный SET ... = Nothing). Делаю я это оттого, что ни в одном из виденных мной примеров ничего подобного я не встретил и решил, что dotnet настолько модная среда разработки, что делает это сама (например при закрытии формы).<br><br>Итак, подскажите, плз:<br>1) Что может жрать столько памяти?<br>2) Надо ли закрывать коннекшены? <br>3) Надо ли явно убивать датасеты после их заполнения и вывода данных в dbgrid (этого бы делать не хотелось, т.к. они (датасеты) нужны мне для дальнейшей работы).<br><br>Заранее премного благодарен.<br>]]></description>
        <author>gae</author>
        <category>.NET: Общие вопросы</category>
      </item>
	
      </channel>
      </rss>
	