Как ускорить импорт CSV файла с 300к записей?
если файл простой, поля без кавычек и переводов строк, то читай fgets/explode
будет быстрее в 40 раз чем fgetcsv

плюс весь процесс заключить в транзакцию. тоже раз в 70 должно ускорить запись в базу

Но вообще конечно надо профилировать сначала.  То есть смотреть, какая часть скрипта занимает сколько времени. чтобы не тыкать пальцем в небо.

Поэтому 
1. Всё поставить на домашнем компе.
2. добавить перед циклом  $time = time(); а после цикла - echo time() - $time;
3. Сначала закомментировать всю работу с базой - то есть оставить только чтение из файла, и посмотреть сколько оно занимает
4. Раскомментировать операторы чтения из БД, и вычесть из результата время на чтение файла - получим сколько времени занимает чтение
5. Раскомментировать остальное и замерить полное выполнение скрипта, с записью в БД.

С этими цифрами уже идти сюда.
И задавать осмысленный вопрос, "как мне ускорить такую-то операцию", а не "как мне прикрутить кривые костыли к моему кривому коду"
$res = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>2), $arSelect);
Вынесите это из цикла и обновляйте только те цены которые изменились и будет вам счастье.