List Control

20/05/2005 - 18:30 por Willser F. González C. | Informe spam
Hola Grupo,

Necesito llenar un list control (en modo reporte) con 120.000 registros
provenientes de una tabla Sybase ASE.

Por ahora lo estoy haciendo manualmente porque necesito mostrar formateado
el contenido de cada campo.

Así:

void CEstViewView::OnUpdateEstreg()
{
int i = 0;

CString l_csChain;


BeginWaitCursor();

m_clcEstReg.DeleteAllItems();


// Con estas dos líneas se consigue disminuir en poco más del 50% el
tiempo de llenado.

m_clcEstReg.EnableWindow(false);
m_clcEstReg.ShowWindow(SW_HIDE);


m_crerEstReg.Requery(); // Toma 3 segundos.


if (!m_crerEstReg.IsBOF())
{
m_crerEstReg.MoveLast(); // Actualizar el contador de registros.
Toma 36 segundos.

m_crerEstReg.MoveFirst();
}

m_clcEstReg.SetItemCount(m_crerEstReg.GetRecordCount()); // Ahorro de
6 segundos.

// El siguiente while(...) toma 52 segundos.
// Sin el Format(...) ni el InsertItem(...): 50 segundos.
// Sólo con el Format(...) y el InsertItem(...) (sin MoveNext(...)): 6
segundos.

while (!m_crerEstReg.IsEOF())
{
l_csChain.Format("%d.%02d.%02d",
m_crerEstReg.m_opefecha.GetYear(),
m_crerEstReg.m_opefecha.GetMonth(),
m_crerEstReg.m_opefecha.GetDay());

// Por ahora, formatear y llenar sólo la primer columna.

m_clcEstReg.InsertItem(i++, l_csChain);

m_crerEstReg.MoveNext();
}

m_clcEstReg.ShowWindow(SW_SHOW);
m_clcEstReg.EnableWindow();

EndWaitCursor();
}

El tiempo actual oscila entre los 40 a 45 segundos.

Si se aplica el m_clcEstReg.SetItemCount(m_crerEstReg.GetRecordCount()) se
tiene un ahorro de 6 segundos, pero para poder conocer el número de
registros se necesita ejecutar un MoveLast(...), pero este comando implica
un consumo adicional de 36 segundos.

Aparte del SetItemCount(...), del EnableWindow(...) y del ShowWindow(...)
qué otras opciones se pueden aplicar a este método de llenado del List
Control para disminuir el tiempo?. Recuerdo haber leído algo al respecto un
tiempo atrás, pero ahora no sé dónde lo leí.

El acceso a la tabla es con CRecordset.

Mil Gracias.

Willser F.
willser@gmail.com
 

Leer las respuestas

#1 William GS
23/05/2005 - 04:27 | Informe spam
Hola, no soy expero en el tema, pero quizá una lista
virtual te ayude. Busca por "Virtual List" en
www.CodeProject.com y www.codeguru.com

William GS

Preguntas similares