¿Cuál debería usar por motivos de rendimiento?
Los métodos Database.Save
recuperar el valor del campo clave primaria utilizando GetValue
, a continuación, llama Database.Insert
o Database.Update
en consecuencia.
Por lo tanto, solo debe usar Database.Save
cuando su código realmente necesite guardar cambios en un objeto que podría ser nuevo o preexistente. Además, tenga en cuenta que su tabla debe tener una columna de clave principal de incremento automático para que funcione Database.Save
.
Incluso sin la ligera diferencia de rendimiento, preferiría la semántica correcta, utilizando Insertar o Actualizar sobre Guardar.
Uno no es menos conveniente para mí que el otro ...
Eso no es realmente cierto.
Database.Insert(poco)
buscará valores para tableName
y pkName
en atributos personalizados en la definición de su clase baja. Si usa las plantillas T4, estos valores se mantendrán sincronizados con su base de datos automáticamente, y solo se especificarán en una ubicación. Por otro lado, si los pasa en cada llamada a un método, se repetirán innumerables veces a lo largo de su código base. SECO. ¿Qué sucede si necesita cambiar uno de los valores más adelante?
Ahora, Database.Insert(poco)
será un rendimiento ligeramente menor debido a esa búsqueda.Sin embargo, PetaPoco almacena en caché el resultado de que las operaciones de búsqueda en un diccionario estático, por lo que el impacto en el rendimiento será muy pequeño después de la primera búsqueda:
RWLock.EnterReadLock();
PocoData pd;
try
{
if (m_PocoDatas.TryGetValue(t, out pd))
return pd;
}
finally
{
RWLock.ExitReadLock();
}
Sí, por esta declaración "Uno no es menos conveniente para mí que el otro. .. ", lo que hice para remediarlo fue esto: http://blogs.msmvps.com/bmains/2011/12/31/helpful-petapoco-template-modifications/ Violación de DRY, sí, pero es mejor para el rendimiento de acuerdo con esto: http://www.toptensoftware.com/Articles/94/PetaPoco-More-Speed. También podría intentar llevar la personalización un paso más allá ... –
@BrianMains: ¿Realmente necesitas exprimir un poco más de velocidad? Trabajé con plantillas de SubSonic personalizadas por un tiempo (todavía las usamos en una aplicación que mantenemos), y fue un arrastre. En cualquier caso, creo que he expuesto las compensaciones claramente en mi respuesta. Sin duda, puede elegir la ruta más rápida sobre la ruta más fácil de mantener, pero pocos usos realmente lo necesitarían. Las mayores ganancias se obtendrán de las operaciones de procesamiento por lotes, las declaraciones preparadas, los índices adecuados, etc. –
OK, gracias por la entrada. –