происходит с кодом, подобным xyz->method()
, где xyz
не является объектом и, следовательно, method
не может
Это фатальная ошибка, которая остановит сценарий (уведомление о прямой совместимости: это станет захватывающей ошибкой, начиная с PHP 7).
Чаще всего это знак что в коде отсутствуют проверки условий ошибок. Убедитесь, что объект фактически является объектом перед вызовом его методов.
Пример типичного будет
// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);
В приведенном выше примере запрос не может и prepare()
назначит false
на $statement
. Попытка вызвать метод execute()
приведет к Fatal Error, потому что false
является «не объектом», потому что значение является логическим.
Выясните , почему ваша функция вернула логическое значение вместо объекта. Например, проверьте объект $pdo
для последней произошедшей ошибки. Подробности о том, как отлаживать это, будут зависеть от того, как обрабатываются ошибки для конкретной рассматриваемой функции / объекта / класса.
Если даже сбой ->prepare
не выполняется, то ваш дескриптор
// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);
базы данных
// ... some code using PDO
$statement = $pdo->prepare('invalid query', ...);
$statement->execute(...);
не попал в текущий объем . Найдите, где он определился. Затем передайте его как параметр, сохраните его как свойство или поделите его через глобальную область.
Другой проблемой может быть условное создание объекта, а затем попытка вызова метода вне этого условного блока. Например,
if ($someCondition) {
$myObj = new MyObj();
}
// ...
$myObj->someMethod();
Пытаясь выполнить метод вне условного блока, ваш объект не может быть определен.
Вопросы, относящиеся:
Необходимо установить maxconnection параметр в app.config или web.config файле:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<system.net>
<connectionManagement>
<add address="*" maxconnection="80"/>
</connectionManagement>
</system.net>
</configuration>
Значения до 100 работ очень хорошо с Windows XP.
Обновление: я просто узнал, что метод выше является альтернативным способом установить Систему. Сеть. ServicePointManager. DefaultConnectionLimit
это могло быть ограничение соединения, которое было недавно наложено.
http://www.speedguide.net/read_articles.php?id=1497
и
Вы попытались увеличить макс. соединения в параметрах сети?
Следует иметь в виду, что многопоточный код может всегда вызывать конкуренцию на любых совместно используемых ресурсах и даже если Вы явно не совместно используете ничего, что Вы могли бы использовать классы, которые совместно используют ресурсы под покрытиями.
, Если Вы - действительно выполнение улучшения с 2 40 потоков exes, чем 1 80 потоков exe тогда, необходимо будет запустить расследование с совместно используемых ресурсов. И если это так, код, который Вы процитировали, намного менее интересен, чем код, который создает и управляет потоками.
другая вещь, которую я бросил бы там, существует несколько инструментов, которые можно получить, который сделает этот тип вещи для Вас в общем. См. http://support.microsoft.com/kb/231282 . Также включенный в Visual Studio (я не уверен, что skus) новое поколение инструментов тестирования производительности веб-приложения. И я уверен, смотрели ли Вы, Вы могли бы найти некоторый материал неMS также.
Как Вы создаете свои потоки? Я предполагаю, что, так как Вы знаете, у Вас есть 80 потоков, Вы не используете диспетчера пула потоков, потому что с диспетчером пула потоков можно попросить столько потоков, сколько Вам нравится, и Вы только получите 25 активных потоков за один раз. При создании потоков вручную с массивом тогда, Вы на самом деле получите столько, сколько Вам нужно, однако они находятся все еще в том же пространстве процесса, так, чтобы мог бы ограничить их по потокам, работающим в отдельных процессах.
Вы могли бы также изучить, с каким стилем квартиры потоки становятся созданными, я верю классу Потока ctor STA использования по умолчанию. Попробуйте MTA и посмотрите, влияют ли они на производительность.