Безопасность потоков ASP.NET в коде aspx.cs за файлом - PullRequest
1 голос
/ 24 марта 2010

Я подумываю добавить DataContext в качестве переменной-члена в мой класс кода aspx.cs для выполнения запросов LinqToSql.

Безопасен ли этот поток? Я не уверен, создается ли новый экземпляр этого класса code-behind для каждого HTTP-запроса или этот экземпляр является общим для всех потоков запросов?

Боюсь, что я получу 10 одновременных HTTP-запросов, которые будут использовать один и тот же сеанс базы данных.

public partial class MyPage : System.Web.UI.Page
{
    private DataContext myDB = new DataContext();

    protected void MyAction_Click(object sender, EventArgs e)
    {
        myDB.DoWork();
    }
} 

Ответы [ 2 ]

4 голосов
/ 24 марта 2010

Объекты DataContext Безопасность потоков на MSDN объясняется так:

Любые открытые статические (Shared в Visual Basic) члены этого типа являются поточно-ориентированными. Любые члены экземпляра не гарантированно являются потокобезопасными.

Поскольку вы используете частного участника, вы должны рассмотреть вопрос об использовании его в классе. Пока вы не запускаете фоновые потоки и не делитесь экземпляром с вами, вам не о чем беспокоиться.

DataContext следует рассматривать как ресурс, и вы можете рассмотреть возможность его явного удаления в рамках жизненного цикла вашего класса. Это достаточно легкий объект, чтобы рассмотреть возможность использования блока использования для каждой операции, в зависимости от вашего использования. См. Описание MSDN :

экземпляр DataContext рассчитан на одну «единицу работы», однако ваше приложение определяет этот термин. DataContext легок и не дорог в создании. Типичное приложение LINQ to SQL создает экземпляры DataContext в области действия метода или в качестве члена недолговечных классов, представляющих логический набор связанных операций с базой данных.

1 голос
/ 24 марта 2010

Это безопасно, потому что каждый раз, когда ваша страница загружается, создается новый экземпляр MyPage, поэтому также создается новый экземпляр вашего DataContext.

Нет проблем с безопасностью потоков.

...