亚音速竞赛条件检测到每个新的DB连接



我很难调试服务。

我将首先解释我正在运行的Cenario。我使用他们的服务导入,几代报告和导出数据获得了9个数据库。它们的运行良好一两天,但是在与数据库有新的连接时,亚音音开始给出异常,所有例外都是Simillar,只需更改数据库操作,就有一个景象:

Probable I/O race condition detected while copying memory. The I/O package is not thread safe by default. In multithreaded applications, a stream must be accessed in a thread-safe way, such as a thread-safe wrapper returned by TextReader's or TextWriter's Synchronized methods. This also applies to classes like StreamWriter and StreamReader.
   at System.Buffer.InternalBlockCopy(Array src, Int32 srcOffsetBytes, Array dst, Int32 dstOffsetBytes, Int32 byteCount)
   at System.IO.StreamWriter.Write(Char[] buffer, Int32 index, Int32 count)
   at System.IO.TextWriter.WriteLine(String value)
   at System.IO.TextWriter.WriteLine(String format, Object arg0)
   at System.IO.TextWriter.SyncTextWriter.WriteLine(String format, Object arg0)
   at SubSonic.DataProviders.DbDataProvider.ExecuteReader(QueryCommand qry) in C:[path]SubSonic.CoreDataProvidersDbDataProvider.cs:line 112
   at SubSonic.Linq.Structure.DbQueryProvider.Execute[T](QueryCommand`1 query, Object[] paramValues) in C:[path]SubSonic.CoreLinqStructureDbQueryProvider.cs:line 280
   at lambda_method(Closure )
   at SubSonic.Linq.Structure.DbQueryProvider.Execute(Expression expression) in C:[path]SubSonic.CoreLinqStructureDbQueryProvider.cs:line 131
   at SubSonic.Linq.Structure.QueryProvider.System.Linq.IQueryProvider.Execute(Expression expression) in C:[path]SubSonic.CoreLinqStructureQueryProvider.cs:line 50
   at SubSonic.Linq.Structure.Query`1.GetEnumerator() in C:[path]SubSonic.CoreLinqStructureQuery.cs:line 85
   at System.Collections.Generic.List`1..ctor(IEnumerable`1 collection)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at [namespace].ReportManager.GetAllPending() in [path]ReportManager.cs:line 193
   at [namespace].ReportsServiceHandler.Run() in C:[path]ReportsServiceHandler.cs:line 137

到目前为止,我唯一的解决方案是重置该服务,但我无法发现可能导致这一点的原因。我试图在本地环境中调试它,但我无法做到。

有人知道亚音速中的错误还是我如何在服务中找到问题?

预先感谢您的帮助。

subsonics3返回您的读者,您可以按照方式将其处置

Query qry = Product.CreateQuery().WHERE("ListPrice > 50.00")
            .AND("Class = L").AND("Color = Yellow");
using(IDataReader rdr = qry.ExecuteReader())
{
 while (rdr.Read()) {
   Console.WriteLine(rdr[Product.Columns.Name].ToString());
 }
}

使用(sqldatareader reader = command.executereader()) { ...做你的东西... }


我认为您需要通过使用using来正确处理您的连接,因为可能存在您以前使用的连接,即仍未打开,即未关闭。

using(var connection = new Connection())
{
}

上面代码处置您的连接。或者,如果不是那里,我建议在使用之后使用处置模式和处置conneciton对象。

相关内容

  • 没有找到相关文章

最新更新