Провайдеры типа F# очень-очень медленная сборка

Я играю с поставщиками типов, в частности с поставщиком типа структуры сущности sql. Я пишу тесты для базы данных, в которой много объектов, и она удаленная, поэтому соединение немного медленное. каждый раз, когда я создаю проект, требуется много времени, несколько минут для завершения сборки.

что мне не хватает, почему компилятор не кэширует информацию о типе?

P.S. С интерактивным F# все еще хуже....


person AK_    schedule 18.06.2013    source источник
comment
С чем вы сравниваете, что считаете медленным? Какова ваша точка сравнения? Я имею в виду, пробовали ли вы Type Providers на другом сервере? Проголосуйте за закрытие, потому что это слишком широкий вопрос.   -  person Onorio Catenacci    schedule 18.06.2013
comment
Сборка, которая каждый раз занимает несколько минут, занимает слишком много времени... по сравнению с любой другой сборкой.   -  person AK_    schedule 18.06.2013
comment
Сборка, которая каждый раз занимает несколько минут? Раньше я работал над коммерческим приложением на C++, на сборку которого уходило 1/2 часа каждый раз, когда мы его создавали — и это после нескольких раундов оптимизации. Если вы не создаете игрушечный код каждый раз, компиляция займет некоторое время. Сказать, что он слишком медленный, это все равно, что сказать конечным пользователем, что его слишком сложно использовать — расплывчато и довольно бесполезно.   -  person Onorio Catenacci    schedule 18.06.2013
comment
у меня есть один исходный файл, и он содержит 9 строк. компилятор воссоздает всю магию поставщика типов каждый раз, когда я компилирую, и это действительно занимает слишком много времени.   -  person AK_    schedule 19.06.2013
comment
Хороший вопрос, может быть, некоторые люди никогда не слышали о tdd? и до сих пор кормят перфокартами свой компьютер ;-) Быстрые сборки и возможность запускать быстрые тестовые раунды очень и очень важны!   -  person halcwb    schedule 31.07.2013


Ответы (3)


Попробуйте использовать атрибут LocalSchemaFile для поставщика данных. Это указывает на файл .csdl, который используется для создания типов. Вы можете попросить поставщика типов обновить этот файл, задав для атрибута ForceUpdate значение true. Для запуска из кэшированной схемы просто установите для ForceUpdate значение false. Вот как я это делаю с помощью поставщика SqlDataConnection, который очень похож на поставщика SqlEntityConnection.

type schema = SqlDataConnection< LocalSchemaFile = "Schema.dbml", ForceUpdate = false, ConnectionString = @"Data Source=<insert your connection string here>" >
person John Atwood    schedule 18.06.2013

Помимо того, что можно определить как «медленную сборку» (если вы находитесь в красно-зеленом круге разработки tdd, сборки быстро становятся медленными!), я переместил свой код поставщика клиентского типа в отдельный проект. У меня уже было установлено для ForceUpdate значение false, но сборка по-прежнему была медленной (очевидно, все еще выполнялась фоновая проверка сгенерированных файлов dbml, в моем случае это файлы wsdlschema).

После переноса всего кода поставщика типов в отдельные проекты сборки стали значительно быстрее!

Примечание: загрузка интерактива была еще быстрее, только вам нужно добавить ссылку на dll для типов

person halcwb    schedule 31.07.2013

Похоже, что узкое место находится в удаленном соединении. Я также предполагаю, что вам приходится часто редактировать и перекомпилировать код доступа к БД.

Некоторые поставщики типов могут указывать на локальные сценарии SQL вместо живого соединения, если это не так, создайте локальную базу данных, которая будет реплицировать схему (и статические данные в таблицах enum, если они у вас есть). Соединение для поставщиков типов/компилятора и для среды выполнения не обязательно должно быть одинаковым.

Существуют инструменты для синхронизации схем время от времени, например Red Gate SQL Compare (это отличный инструмент, но не бесплатный), или просто регенерировать полную схему базы данных SQL, воссоздавать локальную базу данных и запускать ее время от времени (это также может быть автоматизировано). но это другая история).

person KolA    schedule 20.08.2019