Можем ли мы использовать транзакции на объектах C#.Можем ли мы реализовать транзакцию на объектах C#?
Все транзакции предназначены только для реляционной базы данных, такой как MSSQL, ORACLE и т. Д. ...?
Спасибо.
Можем ли мы использовать транзакции на объектах C#.Можем ли мы реализовать транзакцию на объектах C#?
Все транзакции предназначены только для реляционной базы данных, такой как MSSQL, ORACLE и т. Д. ...?
Спасибо.
Что вы спрашиваете, называется Software Transactional Memory. Поскольку в настоящее время это открытая область исследований, и на данный момент нет родной поддержки языка C#, вам может быть полезно использовать existing synchronization options for C#, например ключевое слово lock
, мониторы, кнопки ожидания и т. Д.
Если вы действительно нужны передовые транзакционные функции, существует много library implementations, например, < Редактировать>
SXM от Microsoft Research
STM.NET </edit>.
Я знаю, что это старый ответ (и вопрос), но теперь я просто интересовался транзакциями C# для операций с памятью и нашел это. Однако ссылки на STM.NET кажутся мертвыми. Был ли проект прекращен? Есть ли альтернатива? – Shaamaan
@Shaamaan: Ссылка Wikipedia также имеет список реализаций: https: // en.wikipedia.org/wiki/Software_transactional_memory#C.23 – Heinzi
Там нет SQL-подобного transactioning для C# объектов, но если это потому, что у вас есть поточная проблема, вы должны использовать lock
:
lock (myList)
{
if (myList.Count > 0)
myList.Clear();
}
Это просто очищает список, но гарантирует, что он не может быть изменен другой поток одновременно.
Для приятного обсуждения, как реализовать транзакцию в ООП, посмотрите на это discussion. Там шаблон памяти и состояния подсвечивается для достижения транзакционного поведения (среди других методов).
Возможно, вас заинтересует Software Transactional Memory. В мире .NET существует одна реализация, называемая STM.NET.
Программное обеспечение транзакционной памяти (STM.NET) представляет собой механизм для эффективного изоляции общего состояния. Программист демаркирует область кода как действующую в рамках транзакции, которая является «атомарной» и «изолированной» от другого транзакций, выполняемых одновременно.
Вот блог команды Microsoft STM.NET: http://blogs.msdn.com/stmteam/
Вы правы относительно STM, но не забудьте отметить, что STM все еще находится в исследовании, разработке, и я бы не использовал это в производственном программном обеспечении. – Steven
Взгляните на программную транзакционную память (STM.NET).
Он не делал это в .Net 4, но доступен в виде отдельной загрузки
Был Interesting article на блоге Джо Даффи о попытке сделать транзакционной памяти в MS. Если бы я подвел итог, я бы сказал: «Сделай это сам, если это будет весело.
Вы можете использовать TransactionScope Class
.
Duplicate: http://stackoverflow.com/questions/2020660/transactions-in-c –