Я никогда не писал на этом форуме раньше, но использовал его для исследования, но на этот раз я не смог найти ответ ... возможно, я просто не формулирую его правильно.Вызов нового многократного использования на том же объекте
Я использую SqlCeCommand довольно много в проекте Compact Framework, над которым я работал некоторое время, и у меня было много проблем с нехваткой памяти, поэтому я пытаюсь оптимизировать неуправляемые части кода лучше ,
Взгляните на это:
Dim SQLCmd as SQLCeCommand
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd = New SQLCeCommand
SQLCmd.Connection = conndb
... Process db stuff
SQLCmd.Dispose()
Допустимо ли это, или я теряю к объему памяти каждый раз, когда я называю Новое на одном объекте? Причина, по которой я делал это, а не поддерживать один и тот же экземпляр объекта, был таким образом, что мне не приходилось явно указывать свойства SQLCmd каждый раз. Поскольку некоторые могут использовать параметры, а некоторые могут не так, я думал, что использование нового будет более простым способом убедиться, что все было ясно.
Любые мысли или лучший способ приблизиться к этому?
Спасибо за ваш вклад, это то, что я думал о ссылке заблудиться. Работает ли GC с неуправляемым кодом? – henda79
Неуправляемый код находится за пределами области Garbage Collector, в основном вы сами по себе, как на C/C++. Если вы действительно намереваетесь «неуправляемый ресурс» вместо этого, имейте в виду, что сборщик мусора знает обо всех управляемых ресурсах, и в какой-то момент GC освободит всю связанную память и ресурсы. GC не знает о неуправляемых ресурсах, таких как файлы, потоки и дескрипторы, поэтому, если вы не очищаете их явно в своем коде, тогда вы получите утечки памяти и заблокированные ресурсы. – Steve
хорошо, я думаю, что это очищает. Однако вы не можете объявить переменную за пределами используемого блока. Это должно быть сделано как «using SQLCmd = New SqlCeCommand», и это компактная структура, которая должна быть «использованием SQLCmd как новой SqlCeCommand», поскольку она не поддерживает позднюю привязку. Спасибо за совет. – henda79