我创建了一个 XRMTool(WPF) 来将 Dynamics CRM Online 中的数据提取到 XML 文件中。输出文件可能有一百万行,但我收到以下错误。
未能分配 2147483647 字节的托管内存缓冲区。可用内存量可能很低。
我可以添加一些过滤器并减少行数,但根据应用程序的要求,我必须一次提取至少一个月的数据,这将是大约一百万行。
如何增加 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 )