He escrito mi propia capa de datos a medida que persista a un archivo específico y he abstraído con una costumbre DataContext patrón.rendimiento sentencia return dentro de un bloque usando() {} Se deshace antes de ejecutar
esto se basa en el .NET Framework 2.0 (dadas las limitaciones para el servidor de destino), por lo que a pesar de que algunos de ellos podrían parecerse a LINQ a SQL, no es! Acabo de implementar un patrón de datos similar.
véase el ejemplo siguiente, por ejemplo de una situación que todavía no puedo explicar.
Para obtener todas las instancias de los animales - Lo hago y funciona método bien
public static IEnumerable<Animal> GetAllAnimals() {
AnimalDataContext dataContext = new AnimalDataContext();
return dataContext.GetAllAnimals();
}
Y la aplicación de las GetAllAnimals() en el AnimalDataContext() por debajo
public IEnumerable<Animal> GetAllAnimals() {
foreach (var animalName in AnimalXmlReader.GetNames())
{
yield return GetAnimal(animalName);
}
}
El AnimalDataContext () implementa IDisposable porque tengo una XMLTextReader allí y quiero para asegurarse de que se limpie rápidamente.
Ahora bien, si envuelvo la primera llamada dentro de una instrucción using al igual que
public static IEnumerable<Animal> GetAllAnimals() {
using(AnimalDataContext dataContext = new AnimalDataContext()) {
return dataContext.GetAllAnimals();
}
}
y poner un punto de ruptura en la primera línea de los AnimalDataContext.GetAllAnimals() método y otro punto de ruptura en el primer línea en el método AnimalDataContext.Dispose(), y ejecutar ...
el método Dispose() se llama primero para que AnimalXmlReader.GetNames() da "referencia a objeto no establecida como instancia de objeto" porque tiene AnimalXmlReader se ha establecido en nulo en el Dispose() ???
¿Alguna idea? Tengo el presentimiento de que su regreso rendimiento relacionado con no que se les permita ser llamado dentro de un bloque try-catch, que usando representa efectivamente, una vez compilado ...
Esto es básicamente uno de los problemas que he encontrado, así, ver a mi pregunta aquí: http://stackoverflow.com/questions/1524367 –