Salesforce: C# Api сравнить с ApexDataloader
У меня проблема с производительностью в salesforce. Я пытаюсь загрузить таблицу из salesforce в Excel cvs, для этого я протестировал ApexDataLoader и обнаружил, что загрузка всей таблицы потенциальных возможностей для моей организации занимает около 4~5 минут и около 60 000 записей.,
Теперь я хочу сделать то же самое с кодом C#, для этого я пишу этот код:
var user = "xxx";
var password = "xxx";
var token = "xxx";
var sforceService = new SforceService();
var login = sforceService.login(user, String.Concat(password, token));
sforceService.Url = login.serverUrl;
sforceService.SessionHeaderValue = new SessionHeader { sessionId = login.sessionId };
var query = "The full query that I took from ApexDataLoder";
var startTime = DateTime.Now.TimeOfDay;
var firstTime = DateTime.Now.TimeOfDay;
var result = sforceService.query(query);
int i = 0;
while (!result.done)
{
var endTime = DateTime.Now.TimeOfDay;
Debug.Print(endTime.Subtract(startTime) + " " + i * result.records.Count() + " - " + (i + 1) * result.records.Count() +
" Time from start: " + endTime.Subtract(firstTime));
startTime = DateTime.Now.TimeOfDay;
result = sforceService.queryMore(result.queryLocator);
i++;
}
После нескольких строк я увидел, что я прочитал всего 2000 строк (из 60 000) в 2 миниатюрах.
Это значит, что для получения всей таблицы мне понадобится 60 минут.
Почему такая большая разница между этим ApexDataLoader (5 минут) и моим кодом? что я делаю не так?
Спасибо за помощь!
1 ответ
Я обнаружил 2 вещи, которые действительно улучшают производительность, во-первых, установить EnableDecompression в true
sforceService.EnableDecompression = true;
И второе основано на этом потоке, лучше сделать запрос "выбрать Id из Lead" и собрать все идентификаторы, а затем выполнить многопоточную обработку для получения данных с помощью функции получения.
Надеюсь, что это поможет людям, и если у кого-то есть другие приемы улучшения, пожалуйста, дайте мне знать