Я создал XRMTool (WPF) для извлечения данных из Dynamics CRM Online в файл XML. Выходной файл, вероятно, может иметь миллион строк, но я получаю следующую ошибку.
Не удалось выделить буфер управляемой памяти размером 2 147 483 647 байт. Объем доступной памяти может быть низким.
Я могу добавить некоторые фильтры и уменьшить количество строк, но в соответствии с требованиями приложения мне нужно извлечь данные как минимум за месяц за один раз, что составит около миллиона строк.
Как увеличить буфер памяти в приложении WPF?
Ниже приведен мой код
string fetchaudit = @"<fetch version='1.0' mapping='logical' output-format='xml-platform'>
<entity name='audit'>
<attribute name='action' />
<attribute name='auditid' />
<attribute name='callinguserid' />
<attribute name='objecttypecode' />
<attribute name='createdon' />
<attribute name='objectid' />
<attribute name='objectid' />
<attribute name='operation' />
<attribute name='regardingobjectid' />
<attribute name='transactionid' />
<attribute name='userid' />
<filter type='and'>
<condition attribute='createdon' operator='on-or-after' value='" + Fromdate + @"' />
<condition attribute='createdon' operator='on-or-before' value='" + Todate + @"' />
</filter>
</entity>
</fetch>";
while (true)
{
string xml = CreateXml(fetchaudit, pagingCookie, pageNumber, fetchCount);
RetrieveMultipleRequest fetchRequest1 = new RetrieveMultipleRequest
{
Query = new FetchExpression(xml) // Error occurs here when page number reaches 100
};
EntityCollection returnCollection = ((RetrieveMultipleResponse)_ctrl.CrmConnectionMgr.CrmSvc.Execute(fetchRequest1)).EntityCollection;
// var collection = _ctrl.CrmConnectionMgr.CrmSvc.GetEntityDataByFetchSearchEC(xml);
if (returnCollection != null)
{
if (returnCollection.Entities.Count >= 0)
Entities.AddRange(returnCollection.Entities);
}
if (returnCollection.MoreRecords)
{
pageNumber++;
pagingCookie = returnCollection.PagingCookie;
}
else
{
break;
}
} // end while
Я использую следующий подход из SDK для разбиения по страницам SampleCode\CS\GeneralProgramming\Queries\FetchPagingWithCookie.cs (https://msdn.microsoft.com/en-us/library/gg309717.aspx)