![]() |
|
Самый быстрый способ обмена данными с программой .exe? | ☑ | ||
---|---|---|---|---|
0
manking
14.11.15
✎
08:25
|
Добрый день.
Есть exe программа, из 1С сервер туда нужно передать 200mb данных, там посчитать и вернуть в 1с. Какой самый быстрый способ это сделать? |
|||
1
Горогуля
14.11.15
✎
08:27
|
Новый ИнтернетПочта
|
|||
2
Провинциальный 1сник
14.11.15
✎
08:27
|
Зависит от этой exe-программы, что она может. Очевидно.
|
|||
3
ДенисЧ
14.11.15
✎
08:29
|
Тот, который поддерживает эта программа.
|
|||
4
manking
14.11.15
✎
08:57
|
Ну так я и хочу узнать какой способ самый быстрый и надежный.
1) Запустить exe с параметрами через ЗапуститьПриложение(), дождаться завершения, получить правильный код и прочитать файл data.txt который она запишет. 2) Сделать exe в виде службы или сервера и общаться с ней через сокеты или как то так https://ru.wikipedia.org/wiki/Межпроцессное_взаимодействие Но непонятно что поддерживает из этого 1С. 3) 1C и exe пишут и читают данные в-из сторонней субд. Например есть ли ограничения на размер-длину параметров cmd и функции ЗапуститьПриложение()? При межпроцессорном обмене гарантия 100%, что не будет сбоя, или там нет гарантии доставки как и в udp протоколе? |
|||
5
spectre1978
14.11.15
✎
08:57
|
(0) а вам с какой целью? Программа EXE существует "как данность" или она разрабатывается и вы хотите дать разработчику техзадание на экспорт-импорт?
|
|||
6
Mikeware
14.11.15
✎
08:59
|
Азбука морзе...
|
|||
7
Горогуля
14.11.15
✎
09:03
|
(5) серьёзно? человек, так ставящий вопрос собирается давать техзадание?
|
|||
8
spectre1978
14.11.15
✎
09:03
|
(4) Если нужен разовый обмен - пихнул данные, получил ответ - то я бы рассмотрел обмен на файлах TXT, XML, DBF или через стороннюю СУБД (в случае если данные сложные и сильно структурированные). Если нужно обмениваться постоянно, прерывать и начинать заново - тогда сокеты.
|
|||
9
spectre1978
14.11.15
✎
09:04
|
(7) судя по (4), похоже что да.
|
|||
10
ДенисЧ
14.11.15
✎
09:35
|
(9) Пропал Калабуховский дом...
|
|||
11
manking
14.11.15
✎
09:35
|
(8) Программа уже есть на с++. Там есть std::vector, std::map данные, которые нужно передать.
Допустим самый простой способ это периодически смотреть на статус обновления файла data_in.txt и data_out.txt, если время поменялось то можно прочитать и записывать. А как быть с сериализацией? Например std::vector соответствует по функциональности Массив, std::map - типу Соответствие. Как это сделать? Писать самописный парсер или есть четкий стандарт такого обмена? |
|||
12
ДенисЧ
14.11.15
✎
09:36
|
(11) Стандарты-то есть...
Но тебе же нужен самый быстрый? Так вот... Все совместимые стандарты - медленные. |
|||
13
manking
14.11.15
✎
09:48
|
(12) Оптимальный по соотношению скорость-надежность-удобство.
А какие стандарты? Где про это почитать? |
|||
14
ДенисЧ
14.11.15
✎
09:54
|
(13) Почитать - в интернете )))
Всякие json, xml и прочие дьявольские изобретения. |
|||
15
manking
14.11.15
✎
10:13
|
(14) Хорошо, спасибо.
Json кажется самый оптимальный вариант с записью и чтением из файла. |
|||
16
H A D G E H O G s
14.11.15
✎
11:39
|
Самый быстрый транспорт - именованный канал. Тут все будет упираться в сериализацию
|
|||
17
Serginio1
14.11.15
✎
11:40
|
||||
18
Serginio1
14.11.15
✎
11:42
|
(15) Есть еще более компактный и быстрый формат ProtoBuf
http://habrahabr.ru/post/119503/ |
|||
19
Garykom
гуру
14.11.15
✎
11:52
|
||||
20
Garykom
гуру
14.11.15
✎
11:52
|
||||
21
Serginio1
14.11.15
✎
12:06
|
||||
22
ДенисЧ
14.11.15
✎
12:08
|
(18) (21) дот.нет не нужен. От слова совсем.
|
|||
23
Кирпич
14.11.15
✎
12:17
|
Тупо через файл. Вы чо мудрите? :) пайпы, .net :)) вы чо пьяные чтоли
|
|||
24
Jump
14.11.15
✎
12:22
|
(0) Вы сначала огласите список возможных, а потом уже выбирайте самый быстрый.
Какие способы взаимодействия поддерживает ваша программа? Вполне возможно что самый быстрый это набрать данные на клавиатуре, и потом прочитать их с видеопамяти. |
|||
25
Serginio1
14.11.15
✎
12:34
|
(23) Кстати именованные каналы и есть файлы
https://ru.wikipedia.org/wiki/Именованный_канал К именованному каналу можно обращаться в значительной степени как к файлу. Можно использовать функции Windows API CreateFile, CloseHandle, ReadFile, WriteFile, чтобы открывать и закрывать канал, выполнять чтение и запись. Функции стандартной библиотеки Си, такие, как fopen, fread, fwrite и fclose, тоже можно использовать, в отличие от сокетов Windows (англ.), которые не реализуют использование стандартных файловых операций в сети Проблема файлов это скорость записи и чтения. Пайпы намного быстрее http://stackoverflow.com/questions/6977561/pipe-vs-temporary-file |
|||
26
Кирпич
14.11.15
✎
13:37
|
(25) я имею ввиду файл на диске. Мне мне пофигу, что там еще называют файлом, пайпы или компорты. В 1с нет пайпов, а файлы есть. Поэтому и файлы.
|
|||
27
Serginio1
14.11.15
✎
14:12
|
(26) В 1С много чего нет. Но это не значит, что нельзя использовать пайпы. Вопрос самый быстрый обмен ответ named pipes или memory-mapped files
|
|||
28
Garykom
гуру
14.11.15
✎
14:20
|
(27) гм а каким образом из 1С проще заставить файл сделать/оставить в памяти?
|
|||
29
Garykom
гуру
14.11.15
✎
14:25
|
(28)+ в смысле можно ли без ВК обойтись?
|
|||
30
Serginio1
14.11.15
✎
14:27
|
(29) Есть Com объекты.
|
|||
31
Serginio1
14.11.15
✎
14:28
|
На вэб клиенте есть JavaScript
|
|||
32
Garykom
гуру
14.11.15
✎
14:29
|
(30) а если и без COM объектов?
просто ЗаписьФайла ? а остальное делает ОС или драйвер/программа в ней? |
|||
33
Кирпич
14.11.15
✎
14:33
|
(27) один хрен выгружать из 1с будет полчаса, хоть в пайп хоть не в файл на диске. Так то не важно откуда будет exe читать данные разница в 5 секунд ничего не решает.
|
|||
34
vde69
14.11.15
✎
14:33
|
самый быстрый способ это публикуемый в память файл, работа из ехе с ним будет по скорости как прямое обращение к памяти.
единственная проблема - это недоступность чужого адресного пространства, по этому нужно писать ВК и работать непосредственно в памяти 1с, вызовы по факту будут оперировать только адресами данных а не самими данными... попробуй посмотреть как работают всякие телепаты/снегопаты/защиты в 1с |
|||
35
Кирпич
14.11.15
✎
14:44
|
(34) ты 200 мегабайт из 1с сколько времени будешь выгружать в свю ВК? Мне кажется, что вопрос о пайпах, шаремемах и файлах на диске здесь самый последний. Прочитать в exe файл в 200 мегов за 20 секунд или прочитать из шаремем за 5 после выгрузки из 1с длиной в полчаса... Мне вот как то пофиг. Я бы не стал из за этого внешние компоненты городить.
|
|||
36
Garykom
гуру
14.11.15
✎
14:46
|
(35) нене, он говорит вк отдает адреса в памяти где сама 1С данные хранит
и уже exe читает данные напрямую из памяти из мозгов 1С так сказать )) |
|||
37
Кирпич
14.11.15
✎
14:49
|
(36) ну 1с же должна эти данные создать. А их 200 мегабайт. Попробуй в 1с сгенерить какой нибудь xml в 200 мегов. Это же тихий ужас.
|
|||
38
Garykom
гуру
14.11.15
✎
14:49
|
(36) т.е. к примеру 1С выполнила запрос, его результаты хранятся в ТЗ в памяти
с помощью ВК отдаем адрес где лежит в памяти эта ТЗ и формат хранения в ней данных стороннему exe дальше exe напрямую читает и разбирает данные |
|||
39
Garykom
гуру
14.11.15
✎
14:50
|
(37)+ не путай 200 метров и 200 метров XML'я ))
там проблема то в DOMе |
|||
40
Кирпич
14.11.15
✎
14:53
|
(39) ну просто текст пускай будет. Все равно тормоза. А в (38) нафига вобще exe если все сделать сразу в ВК можно.
|
|||
41
Garykom
гуру
14.11.15
✎
14:57
|
(40) ну можно и в обратную сторону, но один фиг операции с чужим адресным пространством
ВК пулачает адрес куда записать данные в exe )) и берет их их памяти 1С и пишет в память exe но если exe читает оно сразу может преобразовать в свой формат при чтении, а тут exe еще придется уже в своей памяти снова читать и преобразовывать хотя и ВК это может делать |
|||
42
mistеr
14.11.15
✎
15:09
|
(0) Всем похоже пофиг, а я спрошу. Откуда берутся эти 200 Мб данных (из базы?) и что потом происходит с результатом? И что делает программа.
|
|||
43
Garykom
гуру
14.11.15
✎
15:10
|
(42) на какое то шифрование похоже ))
или быстрая обработка для чего то |
|||
44
Serginio1
14.11.15
✎
15:17
|
(33) Это уже другой вопрос. Самый быстрый это
Code First и Linq to EF на примере 1С версии 7.7 Code First и Linq to EF на примере 1С версии 8.3 |
|||
45
Кирпич
14.11.15
✎
15:31
|
(44) Ну мы уже давно поняли, что надо все делать через NET.
|
|||
46
Garykom
гуру
14.11.15
✎
15:40
|
еще бы moonlight не накрылся было бы вообще сдорово
|
|||
47
Serginio1
14.11.15
✎
15:50
|
(45) Не обязательно. Просто прямой доступ.
|
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |