我们今天遇到了这个例外情况,我们一直在重复执行导致它的行动
System.IO.IOException: Insufficient system resources exist to complete the requested service.
at Microsoft.Win32.RegistryKey.Win32Error(Int32 errorCode, String str)
at Microsoft.Win32.RegistryKey.SetValue(String name, Object value, RegistryValueKind valueKind)
at System.Diagnostics.EventLog.CreateEventSource(EventSourceCreationData sourceData)
at System.Diagnostics.EventLog.VerifyAndCreateSource(String sourceName, String currentMachineName)
at System.Diagnostics.EventLog.WriteEntry(String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String source, String message, EventLogEntryType type, Int32 eventID, Int16 category, Byte[] rawData)
at System.Diagnostics.EventLog.WriteEntry(String source, String message)
at DoWork()
重新启动为我们解决了这个问题,但没有解释根本原因。我们通常编写一个少于20个字符的源和一个小于100的消息。运行代码的机器上的资源使用情况很好。
答案 0 :(得分:1)
重新启动完成后我挖了一下,从事件查看器中获取了应用程序日志的副本。那天只有66,000个活动。我写了一个测试应用程序,将66,000个独特的消息写入日志,并且很快就完成了。
然后我注意到每隔10个消息就有不同的来源,所以我改变了我的测试应用程序,每次都写一个独特的来源和消息。大约15分钟后,它只写了6000。
虽然我无法在问题中重现异常,但我认为我们的问题是我们不必要地创建新的EventSources,这经常违背建议的写入事件日志的方式。
作为附录,如果来源已经存在,那就不会有那么大的问题了