ホームページ >バックエンド開発 >C#.Net チュートリアル >.NET Framework - Try-Parse と Tester-Doer の違い

.NET Framework - Try-Parse と Tester-Doer の違い

黄舟
黄舟オリジナル
2017-03-20 11:50:491914ブラウズ

Parse と TryParse

DateTime の Parse(string s) と TryParse(string s, out datetime) は両方とも、文字の日付と時刻を同等の System.DateTime に変換するために使用されます。それでは、関数のパラメータが異なることを除いて、それらの間に違いはありますか?まずコードを見てみましょう:

            string dateTimeStr = "";
            DateTime dt = DateTime.Parse(dateTimeStr);

空の 文字列 を実行し、それを日付と時刻の型に変換します。明らかに変換できず、Parse() は例外をスローします: System.FormatException: s 。有効な文字列表現 が含まれていません。ただし、TryParseこの変換メソッドを実行すると、

            string dateTimeStr = "";       
            DateTime dt2; //dt2未经初始化,就被传递给函数TryParse()
            bool sucflag = DateTime.TryParse(dateTimeStr, out dt2);

この変換では、最初は日付と時刻の最小値が割り当てられ、sucflagはfalseになります。関数の コメント を見てください:

このメソッドが返されると、変換が成功した場合は s に含まれる日付と時刻に相当する System.DateTime 値が含まれ、変換が失敗した場合は System.DateTime が含まれます。最小値。 s 引数が
null

であるか、空の文字列 ("") であるか、日付と時刻の有効な文字列表現が含まれていない場合、変換は失敗します。 ※このパラメータは初期化せずに渡されます。この関数は例外をスローしません。

Try-Parse

それらの違いを確認した後、さらに言うと、例外をスローする parse() は例外をスローしませんでした。これは

と呼ばれる例外のパフォーマンスを最適化する

設計パターン です。 パターン解析を試す。以下は Microsoft の公式説明です: パフォーマンスに非常に敏感な API の場合は、前のセクションで説明した Tester-Doer パターンよりもさらに高速なパターンを使用する必要があります。

このパターンでは、メンバー名を調整する必要があります。定義されたテスト ケースはメンバー セマンティクスの一部です。
たとえば、DateTime は、文字列の解析が失敗した場合に例外をスローする Parse メソッドを定義します。また、解析を試みるが、解析が失敗した場合は false を返す、対応する TryParse メソッドも定義します。 out パラメーターを使用して、成功した解析の結果を返します。

Tester-Doer

Try-Parse モードを説明する際、Microsoft は別のモードを提案しました:

Tester-Doer モード

、Tester-Doer モードとは何ですか? 関数に例外を記述するとパフォーマンスが低下します。Microsoft は、例外の副作用を軽減するためにこのモードを提供しました。

次のコード:

ICollection<int> numbers = 省略获取数据的逻辑
numbers.Add(1);//Add此处不做可写性检查

上記の欠陥: コレクションが読み取り専用の場合、Add メソッドは例外をスローします。このメソッドが呼び出される場所では例外がスローされることが多く、システムのパフォーマンスに影響します。この設計上の欠陥を回避するために、Microsoft は次のように提案しました: 例外をスローするメンバーのパフォーマンスは、メンバーを 2 つに分割することで改善できる場合があります

Add() を次のように分解します:

条件をテストするために使用される

ICollection<int> numbers = 省略获取数据的逻辑if(!numbers.IsReadOnly) //Tester{
    numbers.Add(1); //Doer}

。この例では、プロパティ

IsReadOnly

がテスターと呼ばれます。

潜在的にスロー操作
を実行するために使用されるメンバー、この例では Add メソッドが doer と呼ばれます。

分解後、読み取りを行います。 -only 検出を最初に行うと、Add によってスローされる読み取り専用例外の数が減り、パフォーマンスが向上します。 まとめ Try-Parse PatternとTester-Doerモードは、例外のスローに代わる2つの最適化手法であり、設計パフォーマンスの最適化に役割を果たします。

以上が.NET Framework - Try-Parse と Tester-Doer の違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。