mplementación de @IDisposable: ¿Qué debería ir en 'if (disposición)'

He estado solucionando algunos problemas de pérdida de memoria en una aplicación winforms y noté algunos objetos desechables que no se eliminan explícitamente (el desarrollador no ha llamado al método Dispose). La implementación del método Finalizar tampoco ayuda porque no va enif (disposing) cláusula Todos los eventos estáticos que cancelan el registro y la eliminación de la colección se han puesto enif (disposing) cláusula La mejor práctica es llamar a Dispose si el objeto es desechable, pero desafortunadamente esto sucede a veces

Si hay objetos no administrados, controladores de eventos estáticos y algunas colecciones administradas, es necesario borrarlos al desecharlos. ¿Cuál es la forma de decidir qué debería entrar y qué debería salir deif (disposing) cláusula.

Método de eliminación.

// Dispose(bool disposing) executes in two distinct scenarios.
// If disposing equals true, the method has been called directly
// or indirectly by a user's code. Managed and unmanaged resources
// can be disposed.
// If disposing equals false, the method has been called by the
// runtime from inside the finalizer and you should not reference
// other objects. Only unmanaged resources can be disposed.
protected virtual void Dispose(bool disposing)
{
    if (!disposed)
    {
        if (disposing)
        {
            // Free other state (managed objects).
        }

         // Free your own state (unmanaged objects).
         // Set large fields to null.
         disposed = true;
     }
 }

Dic objetos gestionados deberían enif (disposing) que se ejecuta normalmente solo cuando el desarrollador llama explícitamente al método Dispose. Si se ha implementado el método Finalize y el desarrollador olvida llamar al método Dispose, la ejecución que viene aquí a través del Finalizador no va enif (disposing) sección

Abajo están mis preguntas.

Si tengo controladores de eventos estáticos que provocan pérdidas de memoria, ¿dónde debo anular el registro? Dentro o fuera deif (disposing) cláusula @

Si tengo algunas colecciones que causan pérdidas de memoria, ¿dónde debo borrarlas? Dentro o fuera deif (disposing) cláusula @

Si estoy usando objetos desechables de terceros (por ejemplo: controles de winform devExpress) que no estoy seguro de si son objetos administrados o no administrados. Digamos que quiero deshacerme de ellos cuando desecho un formulario. ¿Cómo puedo saber qué se gestionan y qué son los objetos no gestionados? ¿Ser desechable no dice eso? En tales casos, cómo decidir qué debería entrar y qué debería salir deif (disposing) cláusula @

Si no estoy seguro de que algo se haya gestionado o no, ¿cuáles pueden ser las malas consecuencias de eliminar / borrar / anular el registro de eventos de laif (disposing) cláusula? Digamos que comprueba si es nulo antes de deshacerse de él

Edita

Lo que quiero decir es que la cancelación de registro de eventos es algo como a continuación. Publisher es una instancia de larga duración y debajo de la línea está en el constructor del suscriptor. En este caso, el suscriptor debe cancelar el registro del evento y disponer ante el editor.

publisher.DoSomeEvent += subscriber.DoSomething;

Respuestas a la pregunta(6)

Su respuesta a la pregunta