Я использую Sql Server Compact Edition 3.5.1.0 SP1 в многопоточном приложении. Приложение случайным образом выполняет запросы вставки в транзакциях. С короткими транзакциями работает нормально. Но когда транзакции становятся длиннее и задержка между выполнениями сокращается или когда я запускаю приложение в режиме отладки, SqlCE начинает случайным образом выдавать следующее исключение:
AccessViolationException Попытка
чтение или запись защищенной памяти. это
часто свидетельствует о том, что другие
память повреждена.
в
System.Data.SqlServerCe.SqlCeCommand.CompileQueryPlan ()
в
System.Data.SqlServerCe.SqlCeCommand.ExecuteCommand (CommandBehavior
поведение, метод String,
Параметры ResultSetOptions) в
System.Data.SqlServerCe.SqlCeCommand.ExecuteNonQuery ()
в
SqlCompactTest.TransactedCommandGroupExecutionTest.Test ()
в
D: \ Projects \ PlayGround \ SqlCompactTest \ SqlCompactTest \ TransactedCommandGroupExecutionTest.cs: линия
53 в
SqlCompactTest.ExecutionTest.RunTest ()
в
D: \ Projects \ PlayGround \ SqlCompactTest \ SqlCompactTest \ ExecutionTest.cs: линия
60 в
SqlCompactTest.ExecutionTest.TimerElapsed (Объект
отправитель, ElapsedEventArgs e) в
D: \ Projects \ PlayGround \ SqlCompactTest \ SqlCompactTest \ ExecutionTest.cs: линия
68 в
System.Timers.Timer.MyTimerCallback (Объект
состояние)
Код, который я использую:
IDbConnection connection = m_connectionProvider.GetConnection(); // Just returns new connection
connection.Open();
IDbTransaction transaction = connection.BeginTransaction();
foreach (IDbCommand command in m_commands)
{
command.Connection = connection;
command.ExecuteNonQuery(); // This line throws exception
Thread.Sleep((int)m_delayBetweenExecutions);
}
transaction.Commit();
connection.Close();
Этот код выполняется одновременно в двух потоках. Строка подключения:
"Data Source=testDB.sdf;Encrypt Database=True;Password=test;File Mode=Read Write;Persist Security Info=False;Max Database Size=1024"
В Интернете я нашел абсурдные решения, такие как возврат к Framework 1.1, изменение порядка аргументов методов, включение / отключение оптимизаций и т. Д., Но ни одно из них не помогло мне. Я также перебрал возможные решения на сайтах Microsoft , но не смог найти решение, которое мне подходит. Моя версия файла базы данных - 3.5.0.0.
Как я могу решить эту проблему?