Зависит от того, почему этот член MyClass2 не является сериализуемым.
Если есть какая-то веская причина, почему MyClass2 не может быть представлен в сериализованной форме, то, вероятно, по той же причине применимы к MyClass, поскольку это подкласс.
Возможно, можно написать пользовательскую сериализованную форму для MyClass, реализовав readObject и writeObject таким образом, чтобы состояние данных экземпляра MyClass2 в MyClass можно было соответствующим образом воссоздать из сериализованного данные. Это был бы путь, если бы API MyClass2 был исправлен, и вы не можете добавить Serializable.
Но сначала вы должны выяснить, почему MyClass2 не является сериализуемым и, возможно, его изменить.
Вы не можете переслать список аргументов переменных, так как нет способа выразить то, что находится под ...
в качестве параметра(ов) в другую функцию.
Однако вы можете построить va_list
из ....
параметров и отправить , что в функцию, которая отформатирует его надлежащим образом. Для этого и предназначена vsprintf
. Пример:
void log_DEBUG(const char* fmt, ...) {
char buff[SOME_PROPER_LENGTH];
va_list args;
va_start(args, fmt);
vsprintf(buff, fmt, args);
va_end(args);
log(DEBUG, buff);
}
Всякий раз, когда вы измеряете что-либо, вы должны учитывать затраты на запуск. Если код .net находится в одном процессе, и вы измеряете только один запрос, то ваши измерения будут запятнаны первыми затратами на инициализацию сборок, типов и т. д.
Как предлагал Дарин и другие, вы должны убедиться, что:
1) Вы не выполняете процесс под отладчиком. 2) Вы учитываете затраты на запуск.
Одним из способов выполнения # 2 является выполнение двух запросов и измерение только второго. Или вы можете сделать N запросов, отбросить 1-й, и получить среднее значение последних N-1 запросов. Также убедитесь, что прочитан поток сущностей.
-121--3383600-Каталог bin является копией всех DLL, которые построены и на которые ссылается ваш проект. Когда веб- приложение работает, он ищет в каталоге bin физическую DLL, которая необходима для выполнения веб- приложения.
-121--3153546-Не в стандартном C++.
Вы можете отправить его в другую функцию, которая принимает VA_List в качестве аргумента. Нет другого способа, кроме того, чтобы прибегать к ручному созданию ASM, или делать какую-то ужасную угадать игру, чтобы выяснить «число» параметров.
Это будет работать:
void log_DEBUG(const char* fmt, ...)
{
va_list va;
va_start(va,fmt);
char buff[blah];
vsprintf(buff,fmt,va);
log(DEBUG,buff);
va_end(va);
}
в основном, когда вы пишете функцию, которая принимает ..., вы должны написать другую версию, которая требует VA_LIST - его вежливая вещь, если вы хотите включить этот тип цепочка.
Для удовлетворения ваших конкретных требований вы можете использовать vsprintf
. Мой C/C++ слишком ржавый, чтобы вспомнить, есть ли простой способ сделать это, когда другая функция не предназначена для него (не вдаваясь в уродливые манипуляции со стеком), но я склонен думать, что это не так.