private bool DoReadWriteTest()
{
// follow tree from each starting node.
bool success = true;
double increment = MaxProgress/AvailableNodes.Count;
double position = 0;
Log("Starting ReadWriteTest for {0} Nodes", AvailableNodes.Values.Count);
WriteValueCollection nodesToWrite = new WriteValueCollection();
int nodes = 0;
int operations = 0;
uint[] attributeIds = Attributes.GetIdentifiers();
foreach (Node node in AvailableNodes.Values)
{
nodes++;
AddWriteValues(node, nodesToWrite, attributeIds);
// process batch.
if (nodesToWrite.Count > BlockSize)
{
operations += nodesToWrite.Count;
if (!Write(nodesToWrite))
{
success = false;
break;
}
if (nodes > AvailableNodes.Count/5)
{
Log("Wrote {0} attribute values for {1} nodes.", operations, nodes);
nodes = 0;
operations = 0;
}
nodesToWrite.Clear();
}
position += increment;
ReportProgress(position);
}
// process final batch.
if (success)
{
if (nodesToWrite.Count > 0)
{
operations += nodesToWrite.Count;
if (!Write(nodesToWrite))
{
success = false;
}
else
{
Log("Wrote {0} attribute values for {1} nodes.", operations, nodes);
}
}
}
return success;
}
#endregion