У меня есть неуправляемый COM-объект, и я хотел бы назвать его из ASP.NET 3.5.
Я могу просто назвать его как в C#, или я должен записать что-то специальное в web.config или настроить IIS особенно.
Прямо сейчас я получаю stackoverflow исключение.
Не уклоняйтесь от Perl: это облегчает выполнение такого рода задач!
#! /usr/bin/perl -i.bak
use warnings;
use strict;
my $old = join "|" => qw(
Field_Blob_Medium
Field_Boolean
Field_Unsigned_Int
);
chomp(@ARGV = `find . -iname \*.[ch]pp -print0 |
xargs -0 grep -lE '($old)'`);
unless (@ARGV) {
warn "$0: nothing to do!\n";
exit 0;
}
while (<>) {
s[Field_Blob_Medium] [my::ns::MediumBlob]g ||
s[Field_Boolean] [my::ns::Bool]g ||
s[Field_Unsigned_Int] [my::ns::UInt]g;
print;
}
Переключатель -i
предназначен для контекстного редактирования. Он автоматически создает резервные копии и записывает преобразованные результаты в исходные расположения.
Установка @ ARGV
приводит к тому, что программа вызывалась только теми файлами * .cpp
и * .hpp
, которые содержат старые имена классов. Переключатель -E
на grep
включает расширенные регулярные выражения, так что незаметные (
, )
и |
являются метасимволителями.
При отсутствии попаданий ( т. е. , если @ ARGV
пуст), то делать нечего.
В противном случае, для каждой строки каждого файла, который имеет старые имена (механикой которых управляет Perl!), попробуйте переименовать Field _ Blob _ Medium
в my:: ns:: Medium Blob
и так далее. Обратите внимание, что эти попытки замены прекращаются после первого успеха, поэтому, если строка содержит два разных старых имени, одно будет заменено, а другое останется прежним.
Обычно оператор подстановки записывается s///
, но можно использовать квадратные разделители, как описано выше. Я сделал это, чтобы оправдать новые имена.
Конечно, это резерв для вашей фактической замены.
Наконец, напечатайте
возможно измененную строку, которая из-за -i
записывает ее в обновленный исходный файл.
Как и остальные сказали, убедитесь, что сначала определите узкие места.
Что касается ваших опасений по поводу БД, я бы предложил создать некоторые индексы в ваших таблицах, чтобы ускорить медленные запросы (только при их идентификации)
http://www.postgresql.org/docs/8.2/static/sql-createindex.html
CREATE [ UNIQUE ] INDEX [ CONCURRENTLY ] name ON table [ USING method ]
( { column | ( expression ) } [ opclass ] [, ...] )
[ WITH ( storage_parameter = value [, ... ] ) ]
[ TABLESPACE tablespace ]
[ WHERE predicate ]
Пожалуйста, обязательно прочитайте, когда и когда не использовать индекс
-121--4667587-Невозможно просто вызвать com-объект из управляемого кода. Необходимо выполнить P/Invoke. Узнайте pinvoke.net как p/вызвать большую часть Windows API. Существует также средство для генерации кода p/invoke, называемое p/invoke interop assistant.
Что касается причины переполнения, то оно, вероятно, не связано с какими-либо вызовами com. Возможно, ты делаешь что-то еще не так. Проверьте свои свойства, это одно из самых распространенных мест, где вы окажетесь с SO. Кроме того, проверьте стек вызовов в точке переполнения, поскольку в нем будет указано, какие методы вызывают проблему.
Поскольку она уже нажата, не следует напрямую манипулировать историей. git revert
будет возвращать конкретные изменения от фиксации с использованием новой фиксации, чтобы не манипулировать историей фиксации.
Это невозможно. Javascript может работать только в одном потоке, и нет пути фактически иметь две функции, работающие параллельно. Тебе нужно сделать один звонок, а потом другой. Обратные вызовы из них вызываются (не обязательно в том же порядке, что и методы вызова), когда возвращены данные или возникает ошибка/тайм-аут. Только по завершении одного обратного вызова будет разрешено выполнение второго.
Также помните, что браузеры ограничивают количество активных вызовов ajax. Таким образом, если вы пытаетесь сделать слишком много вызовов ajax, можно подождать (блокируя все javascript код), чтобы другие вызовы были завершены.
-121--3594888-Для проектов .NET имеется вкладка COM в диалоговом окне «Add References». Добавьте ссылку на COM-объект и он должен работать.
Если он работает на машине разработки, но не на производстве, необходимо просто проверить все обычные подозреваемые: