私はあなたの質問が次のとおりだと思います:私のオブジェクトが有効であるかどうかを効率的にチェックするにはどうすればよいですか?
もしそうなら、あなたのオブジェクトがテキストソースから逆シリアル化されただけであるかどうかは問題ではありません。エラーが見つかった場合に逆シリアル化をすばやく停止するために逆シリアル化中にオブジェクトをチェックすることに関する質問の場合、それは別の問題であり、質問を更新する必要があります。
オブジェクトを効率的に検証することは、C#や管理ツールに関してはあまり議論されていません。その理由は、どのように行っても非常に速いからです。読みやすく、保守しやすい方法でチェックを行う方法について話し合うのが一般的です。
あなたの質問は効率についてなので、ここにいくつかのアイデアがあります:
- チェックするオブジェクトが非常に多く、パフォーマンスが非常に重要である場合は、オブジェクトをデータの配列に変更して、一貫した方法でチェックできるようにすることができます。例:
MyObjectに多くのプロパティがあるMyObject[]MyObjectsを使用する代わりに、各プロパティを分割して、次のような配列に配置します。
int[] MyFirstProperties
float[] MySecondProperties
このように、リストをトラバースして値をチェックするループは可能な限り高速になり、メモリ内でループフォワードするため、CPUキャッシュで多くのキャッシュミスが発生することはありません。リンクリストとして実装されていない通常の配列またはリストを使用するようにしてください。これにより、多くのキャッシュミスが発生する可能性があります。
- オブジェクトをプロパティの配列に分割したくない場合は、最高速度は重要ではないようですが、ほぼ最高速度です。次に、最善の策は、オブジェクトをシリアル配列に保持して、次のことを行うことです。
。
bool wasOk = true;
foreach (MyObject obj in MyObjects)
{
if (obj.MyFirstProperty == someBadValue)
{
wasOk = false;
break;
}
if (obj.MySecondProperty == someOtherBadValue)
{
wasOk = false;
break;
}
}
これにより、すべてのオブジェクトのプロパティに問題がないかどうかがチェックされます。あなたのケースが実際に何であるかはわかりませんが、あなたは要点を理解していると思います。オブジェクトのプロパティをチェックするだけの場合、速度はすでに優れています。
文字列比較を行う場合は、より洗練された文字列比較を使用するのではなく、可能な限りx = yを使用するようにしてください。これは、x = yにはいくつかのクイックオプトアウトがあるためです。たとえば、いずれかがnullの場合、メモリアドレスがnullの場合は戻ります。同じです、私が正しく覚えていれば、文字列は等しく、いくつかの賢いものがあります。これを読んでいるJavaの人は、Javaでこれを行わないでください!!! 時々動作しますが、常に動作するとは限りません。
私があなたの質問に答えなかった場合、あなたはあなたの質問を改善する必要があります。