EventSourceException: нет свободных буферов, доступных из операционной системы

Полный текст исключения:

EventSourceException: Нет свободных буферов, доступных из операционной системы (например, слишком высокая частота событий).

Я вызываю этот метод примерно миллион раз из-за рекурсии. Это не останавливает, я просто получаю текст исключения в ветке Отладка вывода в VS2013. Но это очень медленно.

private static IEnumerable<string> RecursiveFindServices(ISymbol sym, Solution sln)
{
    List<string> list = new List<string>();
    var callers = SymbolFinder.FindCallersAsync(sym, sln).Result;  // this line may cause the EventSourceException  (try not to call Async)
    foreach(var caller in callers)
    {
        string name = GetMethodName(caller);
        if (caller.CallingSymbol.ContainingType.Name.EndsWith("Test"))
            continue;

        if (recursiveList.Contains(name))
            continue;

        recursiveList.Add(name);

        if (IsWebservice(caller))
            list.Add(name);
        else
            list.AddRange(RecursiveFindServices(caller.CallingSymbol, sln));
    }

    return list;
}

Кто-нибудь знает, что означает это исключение и как его исправить. Я предполагаю, что медленная скорость связана с этим исключением.

IsWebservice() а также GetMethodName() являются чисто строковыми методами.

Я запускаю Roslyn в проекте VS2013 под.NET 4.5.2, это может быть связано с этим? Я только что установил этот пакет nuget

PM> Инсталляционный пакет Microsoft.CodeAnalysis

А потом мне пришлось скопировать и включить следующие файлы в мой проект.

Microsoft.Build.Conversion.Core.dll     (File Version 14.0)
Microsoft.Build.dll                     (File Version 14.0)
Microsoft.Build.Engine.dll              (File Version 14.0)
Microsoft.Build.Framework.dll           (File Version 14.0)
Microsoft.Build.Tasks.Core.dll          (File Version 14.0)
Microsoft.Build.Utilities.Core.dll      (File Version 14.0)
System.Threading.Tasks.Dataflow.dll     (File Version 4.5.24)

Любая идея, как ускорить код или найти причину исключения, будет полезна. //Спасибо:-)

2 ответа

Я столкнулся с этой проблемой, а также разрабатывал метод рендеринга с VS 2013. Я нашел решение для остановки спама в окне консоли с сообщением:

Перейдите в меню параметров VS 2013:

На немецком это:

EXTRAS -> Optionen… -> Отладка -> Allgemein -> (отметка) Verwalteten Kmpatibilitäsmodus verwenden

На английском это:

ИНСТРУМЕНТЫ -> Параметры… -> Отладка -> Общие -> (пометить) Использовать режим управляемой совместимости

Это остановит сообщение.

Столкнулся и с этим исключением тоже! Не уверен, был ли связан или нет мой диск C: в то время, после освобождения места, не получил это исключение.

Другие вопросы по тегам