¿Es suficiente crear un XmlWriter con un bloque de uso (sin llamar a Close()) o es mejor usar un bloque try/finally y llamar a Close() finalmente?XmlWriter: ¿se requiere cerrar() si se usa un bloque de uso?
Respuesta
El bloque que usa es un atajo para un bloque try/finally con una llamada a Dispose() sobre cualquier objeto que implemente IDisposable.
En el caso de las secuencias y los escritores de secuencias, Dispose() generalmente llama a Close() manualmente. El uso del reflector, aquí está el método Dispose de XmlWriter:
protected virtual void Dispose(bool disposing)
{
if (this.WriteState != WriteState.Closed)
{
try
{
this.Close();
}
catch
{
}
}
}
Así que la respuesta corta es sí, el bloque using
se encargará de cerrar la XmlWriter para usted.
No, no es necesario llamar por separado. Para eso es exactamente el bloque de uso.
Cuando la ejecución sale del bloque que usa, el XmlWriter se elimina, y en el interior, XmlWriter.Dispose
llama al XmlWriter.Close
.
Pero ... reflector en el XmltTextWriter.Close() muestran:
si (this.closeOutput) { this.stream.Close(); } this.Stream = null;
el indicador closeOutput se establece en settings.CloseOutput, que puede ser falso.
¿Estás seguro de que el controlador es libre al usar la expresión "using" en el XmlTextWriter?
Ahora muestra la función virtual vacía: public virtual void Close() {} – amuliar
- 1. ¿Hay alguna necesidad de cerrar una conexión Db si se usa una cláusula de uso?
- 2. ¿Se eliminan los recursos incluso si se lanza una excepción en un bloque de uso?
- 3. ¿Se requiere SqlCommand.Dispose() si se eliminará SqlConnection asociado?
- 4. ¿Se puede desechar un ID si el bloque que usa vuelve?
- 5. ¿Por qué se requiere un vector?
- 6. ¿Cuándo se requiere "auto"?
- 7. ¿Se debe cerrar un WriteStream?
- 8. Averiguar si se usa el recurso
- 9. ¿Se requiere permiso cuando se usa la intención de llamar al teléfono?
- 10. Cómo saber si se usa glibc
- 11. C - Si se usa Realloc, ¿es necesario?
- 12. ¿Debo cerrar() un SQLConnection antes de que se elimine?
- 13. ¿Se requiere ROLLBACK TRANSACTION?
- 14. ¿Se requiere main.cpp?
- 15. cómo saber si se usa un índice alguna vez
- 16. ¿Cuándo se requiere IPPROTO_UDP?
- 17. ¿Por qué el argumento del tipo de mapa C++ requiere un constructor vacío cuando se usa []?
- 18. HTML Forzar img dimensiones requiere bloque?
- 19. XMLWriter vs XMLDictionaryWriter
- 20. ¿Se requiere un tipo de transmisión en malloc?
- 21. ¿Cuándo se requiere ScriptManager/ScriptManagerProxy?
- 22. ¿Se requiere HttpWebRequest.GetResponse para completar un POST?
- 23. ¿Siempre se requiere enlazar un socket?
- 24. ¿Se requiere un número entero? open()
- 25. Drupal: ¿Se requiere subir un archivo?
- 26. Toast no se muestra cuando se usa en el bloque catch
- 27. ¿Se requiere `definer` cuando se crea un procedimiento almacenado?
- 28. Finalmente el bloque no se está ejecutando?
- 29. ¿Cómo se usa `to_sql` en AREL cuando se usa` average() `?
- 30. Invocación asincrónica: ¿se requiere EndInvoke?
Y este es de hecho el código que acabo de ver. Todo lo que hace es llamar 'Cerrar'. –