Завершите по сравнению с, располагают

Используйте эту структуру:

df[['ID','Year']].groupby('Year').count()

и

df[['ID','Year']].groupby('Year').agg('count')

Я надеюсь, что это будет работать нормально. Попробуйте это

207
задан Charles 22 November 2013 в 17:33
поделиться

6 ответов

Others have already covered the difference between Dispose and Finalize (btw the Finalize method is still called a destructor in the language specification), so I'll just add a little about the scenarios where the Finalize method comes in handy.

Some types encapsulate disposable resources in a manner where it is easy to use and dispose of them in a single action. The general usage is often like this: open, read or write, close (Dispose). It fits very well with the using construct.

Others are a bit more difficult. WaitEventHandles for instances are not used like this as they are used to signal from one thread to another. The question then becomes who should call Dispose on these? As a safeguard types like these implement a Finalize method, which makes sure resources are disposed when the instance is no longer referenced by the application.

115
ответ дан 23 November 2019 в 04:44
поделиться

Finalize gets called by the GC when this object is no longer in use.

Dispose is just a normal method which the user of this class can call to release any resources.

If user forgot to call Dispose and if the class have Finalize implemented then GC will make sure it gets called.

--121 --- 613155--

Метод финализатора вызывается, когда ваш объект собирается сборщиком мусора, и у вас нет гарантии, когда это произойдет (вы можете форсировать его, но это снизит производительность).

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

Стандартная практика заключается в реализации IDisposable и Dispose , чтобы вы могли использовать свой объект в с помощью статуи . Например, с использованием (var foo = new MyObject ()) {} . И в вашем финализаторе вы вызываете Dispose , на тот случай, если вызывающий код забыл вас утилизировать.

131
ответ дан 23 November 2019 в 04:44
поделиться

Finalize is the backstop method, called by the garbage collector when it reclaims an object. Dispose is the "deterministic cleanup" method, called by applications to release valuable native resources (window handles, database connections, etc.) when they are no longer needed, rather than leaving them held indefinitely until the GC gets round to the object.

As the user of an object, you always use Dispose. Finalize is for the GC.

As the implementer of a class, if you hold managed resources that ought to be disposed, you implement Dispose. If you hold native resources, you implement both Dispose and Finalize, and both call a common method that releases the native resources. These idioms are typically combined through a private Dispose(bool disposing) method, which Dispose calls with true, and Finalize calls with false. This method always frees native resources, then checks the disposing parameter, and if it is true it disposes managed resources and calls GC.SuppressFinalize.

64
ответ дан 23 November 2019 в 04:44
поделиться

Finalize gets called by the GC when this object is no longer in use.

Dispose is just a normal method which the user of this class can call to release any resources.

If user forgot to call Dispose and if the class have Finalize implemented then GC will make sure it gets called.

31
ответ дан 23 November 2019 в 04:44
поделиться

99% of the time, you should not have to worry about either. :) But, if your objects hold references to non-managed resources (window handles, file handles, for example), you need to provide a way for your managed object to release those resources. Finalize gives implicit control over releasing resources. It is called by the garbage collector. Dispose is a way to give explicit control over a release of resources and can be called directly.

There is much much more to learn about the subject of Garbage Collection, but that's a start.

7
ответ дан 23 November 2019 в 04:44
поделиться

Нужно ли вам явно указывать координаты x / y с плавающей запятой (т.е. 0,0f вместо 0)? Я ожидал бы от этого ошибки компиляции, а не ошибки времени выполнения, поэтому, вероятно, нет.

t создавать пустые деструкторы. Другими словами, вы никогда не должны явно определять деструктор, если вашему классу не нужно очищать неуправляемые ресурсы, и если вы его определите, он должен выполнить некоторую работу. Если впоследствии вам больше не потребуется очищать неуправляемые ресурсы в деструкторе, удалите его полностью.

Dispose

  • Реализуйте IDisposable для каждого типа, у которого есть финализатор
  • Убедитесь, что объект становится непригодным для использования после вызова метода Dispose . Другими словами, избегайте использования объекта после того, как для него был вызван метод Dispose .
  • Вызовите Dispose для всех типов IDisposable , когда закончите с them
  • Разрешить многократный вызов Dispose без возникновения ошибок.
  • Подавить последующие вызовы финализатора из метода Dispose с помощью метода GC.SuppressFinalize
  • Избегать создания одноразовых типов значений
  • Избегать создания исключений изнутри Методы Dispose

Шаблон Dispose / Finalized

  • Microsoft рекомендует реализовать оба метода Dispose и Finalize при работе с неуправляемыми ресурсами. Реализация Finalize будет запущена, и ресурсы все равно будут освобождены, когда объект будет собран сборщиком мусора, даже если разработчик не вызвал явным образом метод Dispose .
  • Очистите неуправляемые ресурсы в метод Finalize , а также метод Dispose . Дополнительно вызовите метод Dispose для любого. NET, которые у вас есть в качестве компонентов внутри этого класса (с неуправляемыми ресурсами в качестве их члена) из метода Dispose .
42
ответ дан 23 November 2019 в 04:44
поделиться
Другие вопросы по тегам:

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