|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
ИзопропилandreybsКороче, не работает. Ваши предложения, по настройке проекта? блд, русским языком говорил - /clr:safe или /clr:pure Да блин, а это что? 38 попугаев?? andreybsДалее меняем на "CLR-поддержка безопасного MSIL (/clr:safe)". CREATE ASSEMBLY for assembly 'TestCPP' failed because the assembly is built for an unsupported version of the CLR runtime. Строка компоновщика: /Yu"stdafx.h" /GS /analyze- /W3 /Zc:wchar_t /Zi /Od /Fd"Debug\vc110.pdb" /fp:precise /D "WIN32" /D "_DEBUG" /D "_WINDLL" /D "_UNICODE" /D "UNICODE" /errorReport:prompt /WX- /Zc:forScope /Oy- /clr:pure /FU"C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll" /FU"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll" /FU"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.dll" /FU"C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll" /MDd /Fa"Debug\" /EHa /nologo /Fo"Debug\" /Fp"Debug\TestCPP.pch" Только толку от этого нет. Работает только через Platform Invoke. А это черте-что цеплять DLL на C#, которая цепляет другую DLL на С++. Как этого монстра дебагить ваще не ясно. Изопропил- только возможкности ничем не будкут отличасться от c# Вот именно. CLR он и в африке CLR. Тогда что говорить о том, что код С++ в два раза быстрее? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 23:05 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
SeVaЕсли нужно быстродействие,то зачем какие-то бубны со сборками в sql server? Ваши варианты? Пользовательское приложение? Я пока не придумал, как взаимодействовать с ним из БД. Предполагается, что источник вызова на вычисление - ХП в БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 23:12 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybsКак этого монстра дебагить ваще не ясно. с головы на ноги поставить - клиент на c#, сервер без всякого clr для управления - WCF захостить ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 23:14 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybsПредполагается, что источник вызова на вычисление - ХП в БД. попробуйте вызвать ХП из клиентского приложения. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 23:15 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
ИзопропилandreybsПредполагается, что источник вызова на вычисление - ХП в БД. попробуйте вызвать ХП из клиентского приложения. Это кажется более разумным, чем WCF. Как-то не верится, что HTTP-шная прослойка (мы же о веб-сервисах горовим, если я не ошибаюсь) обеспечит быстрое взаимодействие со сборкой. Возможно, перенос управления в модуль C++ (клиентское приложение) будет самым производительным и верным решением. Попробую реализовать такой вариант, посмотрим, как это повлияет на производительность. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 23:24 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybsWCF это для управления, а не для вычислений - вроде с управлением траблы были ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 23:25 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybs Ну здрасьте. Цитирую документацию - этот метод создает новый массив и копирует его на место старого. Операция сложности О(n). Для сравнения List<T>.Add сложности O(1). Ну и где тут преимущество на массиве, скажем, из 1000 элементов? при построении в памяти естесно лучше использовать типа стека, а после перехерачивать в массив. ToArray() Супер! Его я использую в некоторых случаях. Но не нравится он мне, т.к. не умеет извлекать элемент по индексу. Не нравится. :) так годиться? Dictionary<int, int> DD; var x= DD.ElementAt(1); А дальше это будет кластер нейросетей. Поверь, я готов каждую запятую учесть, чтобы не потерять в производительности. ещё раз. улучшив алгоритм можно качественно улучшить скорость. гонка за запятую даст слишком мало прироста. уж что что а прирост может дать совершенно другие вещи. как то другой проц ( типа extream edition ) или GPU, генерация кода под специфику задачи, отказ от рекурсий, отказ от LINQ..... - это много эффективнее , чем ловля блох. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 23:50 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
скорость зависит от цены задачи. может оказаться , что проще решать не на серваке с его "распаралелеными задачами" а на выделенной тачке Core i7 ExEdition. проще, понятнее и дешевле. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.07.2013, 23:54 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
ИзопропилandreybsWCF это для управления, а не для вычислений - вроде с управлением траблы были В этом плане проще тогда создать интерфейсную табличку в БД и постоянно "слушать" ее. Тот же WCF, только без HTTP. Я придумал, как организовать взаимодействие - консольная программа, звпускаемая "on demand" через shell или джоб со стороны sql-сервера. Ограничение только одно - она не должна запускаться слишком часто, т.к. процессы запуска приложения в Windows несут большие временные затраты. Это похоже на механизм работы агента репликации, который так же запускается и висит в памяти до тех пор, пока джоб не остановят. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 08:06 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
beg-in-erпри построении в памяти естесно лучше использовать типа стека, а после перехерачивать в массив. ToArray() Копирование из массива в массив (в моем случае копирование таких массивов тысячи) слишком затратно по операциям. Нужно сразу писать в рабочий массив. beg-in-erещё раз. улучшив алгоритм можно качественно улучшить скорость. гонка за запятую даст слишком мало прироста. уж что что а прирост может дать совершенно другие вещи. как то другой проц ( типа extream edition ) или GPU, генерация кода под специфику задачи, отказ от рекурсий, отказ от LINQ..... - это много эффективнее , чем ловля блох. Согласен. Поэтому решу задачу на С++ в виде отдельного приложения, а там посмотрим. Есть у меня пара идей, ка на инлайн ассемблере все в разы ускорить... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 08:15 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
Assembler - это опять преждевременная оптимизация ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 08:19 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
ИзопропилAssembler - это опять преждевременная оптимизация Ладно, ладно, это далекая перспектива, но вполне реальная. О ней позже, сначала С++. Давно писал кучу приложений на С++ Builder по работе с БД, а на VC++ такое ПО не писал - что то немного застрял разбираясь, как к проекту консольного приложения библиотеки adodb подцепить, чтобы нативный доступ к SQL-сервер организовать... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 09:12 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybsкак к проекту консольного приложения библиотеки adodb подцепить Код: c# 1.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675103(v=vs.85).aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 09:19 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
Изопропилandreybsкак к проекту консольного приложения библиотеки adodb подцепить Код: c# 1.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms675103(v=vs.85).aspx Вот спасибо! Как раз включил комп, ща закодим... Я сделал вчера замеры вычислений простенькой нейросети в сборке на С#, реализую аналогичный алгоритм на С++ и сравню результаты производительности по той же сети. Самому интересно - одно дело статьи читать, а другое дело в живую убедиться. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.07.2013, 10:26 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
Наконец то добрался до своей задачи, сейчас пишу компактную библиотеку оберточных классов для ADO DB под мою задачу. Есть вопрос... Для сохранения высокой производительности нужно максимально эффективно организовать работу с БД. Для этого нужно избегать многократной перекомпиляции одинаковых запросов. Для этого запросы нужно писать с использованием параметров. Все работает отлично, но один момент мне не нравится... Есть маленькое неудобство, которое заключается в том, что при создании параметра приходится указывать тип DataTypeEnum, значение _variant_t и размер long. Очевидно, что в большинстве случаев можно на основании типа значения _variant_t.vt извлечь и тип значения и его размер, сократив таким образом количество входных параметров на два. Мне не удается найти описание типа VARTYPE. Например, здесь есть только часть возможных значений Вообще, какие существуют УНИВЕРСАЛЬНЫЕ (т.е. не зависящие от значения _variant_t) способы извлечения DataTypeEnum и размера данных из переменной _variant_t? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2013, 12:20 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybs, ADO DB - это и так обёртка над OLEDB для скриптовых языков - отсюда и VARIANT вместо VARIANT можно использовать CComVariant ( это обёртка над VARIANT ) полное описание в wtypes.h и http://msdn.microsoft.com/en-us/library/windows/desktop/ms221170(v=vs.85).aspx если не хочется возиться с OLE - ODBC используй. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2013, 13:15 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
Изопропилandreybs, ADO DB - это и так обёртка над OLEDB для скриптовых языков - отсюда и VARIANT вместо VARIANT можно использовать CComVariant ( это обёртка над VARIANT ) полное описание в wtypes.h и http://msdn.microsoft.com/en-us/library/windows/desktop/ms221170(v=vs.85).aspx если не хочется возиться с OLE - ODBC используй. Именно этот кодификатор мне и нужен, спасибо! Я сделал обертку только части функций ado, сгруппировав их конкретно под мою задачу. Максимально компактно и без лишних наворотов, исключительно для удобства использования и читабельности кода. А по поводу odbc не уверен, что он подойдет. У меня используется много специфики от sql-сервера - работа с временными таблицами, табличными функциями, прямая-обратная передача параметров и пр. Не факт, что это будет поддерживаться в odbc. Так что я повожусь с ole... :) Тем более, что уже библиотечку написал, оттестировал и подготовил к работе. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2013, 20:56 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybsУ меня используется много специфики от sql-сервера тогда OLEDB лучше чем ADODB, хотя на старте усилий больше потребует ... |
|||
:
Нравится:
Не нравится:
|
|||
03.08.2013, 21:42 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
ИзопропилandreybsУ меня используется много специфики от sql-сервера тогда OLEDB лучше чем ADODB, хотя на старте усилий больше потребует А чем принципиально лучше? Производительность? Если да, то можно ли как-то оценить ожидаемый прирост производительности до того, как углубляться в OLE? Со временем могу свою обертку переделать на OLE вместо ADO. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 17:45 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybsА чем принципиально лучше? вроде ж табличные параметры передавать хотел - http://msdn.microsoft.com/ru-ru/library/ff877933.aspx ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 18:42 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
ИзопропилandreybsА чем принципиально лучше? вроде ж табличные параметры передавать хотел - http://msdn.microsoft.com/ru-ru/library/ff877933.aspx Я говорил о табличных функциях и возвращаемых параметрах, но не важно... Я как-то не думал, что мне потребуется работать с табличными переменными, хотя эта идея тоже хорошая. Буду иметь ввиду, что это через OLE DB можно реализовать. Спасибо за инфу! ... |
|||
:
Нравится:
Не нравится:
|
|||
04.08.2013, 21:03 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
Хотел уточнить по поводу хранения кода методов классов в памяти... Правильно ли я понимаю, что: 1. объект класса хранит лишь таблицу указателей на экземпляры методов класса 2. все экземпляры методов всех классов хранятся в одной и той же области памяти программы 3. для всех объектов одного и того же класса используются одни и те же экземпляры методов (т.е. число экземпляров методов классов не увеличивается с увеличением числа объектов классов) 4. размер памяти, выделяемой на хранение объекта класса, увеличивается на N байт при добавлении в класс нестатического метода, где N-размер ссылки в текущем адресном пространстве памяти (обычно 4 байта, для x32) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 09:05 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybs, 1) да, адрес таблицы 2) все экземпляры методов - что имеется ввиду? Код общий, хранится в сегменте кода 3) да, но забудьте про "экземпляры методов", в с++/c# все экземпляры класса разделяют код 4) нет, увеличивается только размер таблицы методов, которая одна на класс. P.S. детали(ка-то метаданные, виртуальные методы, отличия c# от с++) опущены ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 10:57 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
Изопропилandreybs, 1) да, адрес таблицы 2) все экземпляры методов - что имеется ввиду? Код общий, хранится в сегменте кода 3) да, но забудьте про "экземпляры методов", в с++/c# все экземпляры класса разделяют код 4) нет, увеличивается только размер таблицы методов, которая одна на класс. P.S. детали(ка-то метаданные, виртуальные методы, отличия c# от с++) опущены Ясно, спасибо. А конструкторы тоже хранятся в памяти, как обычные методы в общем сегменте кода? Вопрос возник в связи с тем, что конструкторы могут быть включены в состав структуру (struct), у которой не должно быть таблицы методов в отличие от классов (class). ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 12:16 |
|
высокопроизводительная CLR-сборка с кодом на C++ для SQL Server
|
|||
---|---|---|---|
#18+
andreybsА конструкторы тоже хранятся в памяти, как обычные методы в общем сегменте кода? да, хранятся так же. "Лишний" указатель - вряд ли является узким местом в данном проекте. память, выделяемая C-шным malloc - тоже имеет накладные расходы - на выравнивание данных, на хранение длины выделенного блока. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.08.2013, 12:49 |
|
|
start [/forum/topic.php?fid=20&msg=38349598&tid=1404184]: |
0ms |
get settings: |
10ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
97ms |
get topic data: |
11ms |
get forum data: |
2ms |
get page messages: |
59ms |
get tp. blocked users: |
1ms |
others: | 15ms |
total: | 214ms |
0 / 0 |