0

クラス内で作成されたスタック コレクションを asp.net プロジェクトで使用する必要があります。

public class ExpressionsEvaluator
{
    public Stack<ExpressionParameter> expressionParameters = new Stack<ExpressionParameter>();

    public object EvaluateExpression()
    {
        // calculate expression patamers
        expressionParameters.Push(parameter);

        // Do some functions

        // remove the last parameters
        expressionParameters.Pop();
    }
}

このアプローチはスレッドセーフですか?

Web サイトにアクセスするユーザーごとに、expressionParameters オブジェクトは異なりますか?

使用事例:

    public ActionResult EvaluateExpression(string expression)
    {
        try
        {
            ExpressionsEvaluator expressionEvaluator = new ExpressionsEvaluator();
            object result = expressionEvaluator.EvaluateExpression(expression);
            return Json(result, JsonRequestBehavior.AllowGet);
        }
        catch (Exception ex)
        {
            return Json(new { hasError = true }, JsonRequestBehavior.AllowGet);
        }
    }
4

3 に答える 3

1

このアプローチはスレッドセーフですか?

はい、クラス自体はスレッドセーフです。それはあなたがそれを使う方法です。

expressionParametersオブジェクトは、Webサイトにアクセスするユーザーごとに異なりますか?

それはあなたがそれをどのように使うか、そしてあなたがそれをどこに保存するかに依存します。Webページにインスタンスを作成すると、ページリクエストごとにまったく新しいインスタンスになります。インスタンスを作成してどこかに保存する場合は、そのストレージがどのように機能するかによって異なります。セッションを使用する場合、「はい」よりも、各ユーザーには独自のインスタンスがあります。

于 2012-08-22T08:07:46.673 に答える
0

それは、実際にどのように使用するかによって異なりますExpressionsEvaluator

現在のところ、コードはスレッドセーフをまったく採用していないため、コンシューマーは、たとえば共有インスタンスへのアクセスをロックする必要があります。ExpressionsEvaluator

2番目の質問については、ASP.NETでのセッション管理についてお読みください。

于 2012-08-22T08:03:52.460 に答える
0

.NET Framework 4.0 を使用していると仮定します。

.NET 4.0 Framework では、System.Collections.Concurrent 名前空間にスレッド セーフなコレクションが導入されています。こちらこちらをご覧ください。

ConcurrentBag オブジェクトのスレッド セーフな順序付けされていないコレクションを表します。

ConcurrentDictionary 複数のスレッドが同時にアクセスできるキーと値のペアのスレッド セーフなコレクションを表します。

ConcurrentQueue スレッド セーフな先入れ先出し (FIFO) コレクションを表します。

ConcurrentStack スレッドセーフな後入れ先出し (LIFO) コレクションを表します。

.NET Framework のその他のコレクションは、既定ではスレッド セーフではなく、操作ごとにロックする必要があります。

lock (mySetNeedToBeLock)
{
    mySetNeedToBeLock.Add("my information in set");
}
于 2012-08-22T07:58:44.303 に答える