ホームページ バックエンド開発 C#.Net チュートリアル C#/.NET でよくあるいくつかの間違い

C#/.NET でよくあるいくつかの間違い

Sep 06, 2017 pm 02:25 PM
.net

1 リソースを速やかに解放する
CLR ホスティング環境はガベージ コレクションの役割を果たすため、作成されたオブジェクトによって占有されているメモリを明示的に解放する必要はありません。しかし、それはすべての使用済みオブジェクトを無視できるという意味ではありません。多くのオブジェクトは、他のタイプのシステム リソース (ディスク ファイル、データ接続、ネットワーク ポートなど) をカプセル化します。これらのリソースを使用し続けると、システム リソースが大幅に枯渇し、パフォーマンスが低下し、最終的にはプログラム エラーが発生する可能性があります。ファイル、ネットワーク ポート、またはデータ接続を開いたときは、使用しなくなったらすぐにリソースを明示的に解放する必要があります。
また、リソース操作の場合、通常、例外キャプチャ処理(Try..Catch)を追加する必要があります。このとき、リソースをキャッチしたときにリソースが正常に解放されることを確認するために、最後にリソースを解放することを忘れないでください。例外。
2 マルチスレッドを正しく停止します
FileStream fs = File.Open(…);
Try{…}Finally{ fs.Close;}
この時点で、上記のコードが作業スレッドにあり、Finally まで進んだとします。 、UI スレッドがこのスレッドの Abort() メソッドを呼び出すと、fs.Close が実行される前にワーカー スレッドがfinally コード ブロックから飛び出す可能性が非常に高くなります。こうすることで、FS が閉じられることはありません。
ほとんどの場合、finally は永久に実行されますが、Thread.Abort の呼び出しによってスローされる ThreadAbortException は含まれないため、Abort の使用はお勧めできません。
スレッドを正しく停止するには、呼び出し元がどのような動作をするかには依存しません (Thread.Abort() を直接使用しないでください)。むしろ、ワーカー スレッドが呼び出し元の停止リクエストに積極的に応答できるかどうかに依存します。一般的なメカニズムは、スレッドを停止する必要がある場合、スレッド自体が呼び出し元に対して Cancel インターフェイスを開く責任を負う必要があるということです。
3 型変換関連
データベースから値を読み取る場合、データがあれば int 型になります。データがなければ、値は null になります。型を強制すると、例外が発生します。したがって、強制転送が使用されることはほとんどありません。使用する場合は、プログラム例外を回避するために例外をキャッチする必要があります。
強制転送が良くない場合は、Parseメソッドの例外処理が実装されているTryParseメソッドの使用を推奨します。
Convert を使用することもできますが、これにも例外キャプチャが必要です。実際、型変換、シリアル化、その他の操作が関係する場合は、例外をキャプチャする必要があります。
文字列操作では、大量のスプライシングが発生する場合があります。 StringBuilder を使用することをお勧めします。 String を使用すると、明らかにパフォーマンスが低下します。その理由は、文字列オブジェクトは非常に特殊なオブジェクトであり、値が割り当てられると変更できないためです。実行時に String クラスで結合操作 (割り当て、「+」など) を呼び出すと、メモリ内に新しい文字列オブジェクトが作成されます。これは、新しいオブジェクトに新しいメモリ領域を割り当てる必要があることも意味します。
5 const 定数の変更によって引き起こされる問題
プログラムが他の DLL の const 定数を参照する場合は特に注意してください。
この DLL 内の const 定数を変更する場合は、この DLL 内のこの const 定数を参照するすべてのプログラムを再コンパイルする必要があります。再コンパイルしないと、プログラムで使用される定数値が DL 内の定数値と矛盾します。
さらに、const の代わりに readonly を使用すると、const はコンパイルされた定数であり、readonly は実行時定数であるため、再コンパイルせずにこの問題を解決できます。
6 C# コンパイル ターゲット プラットフォームの問題
プログラムが依存する DLL が X86 用にコンパイルされる場合、プログラム自体のコンパイル ターゲット プラットフォームも (デフォルト オプションの Any CPU ではなく) X86 である必要があります。そうしないと、64 ビット コンピューターが走れない。
7 クロススレッド アクセス制御
インターフェイス プログラムを開発する場合、時間のかかる操作が発生することがあります。プログラムの利便性を考慮して、通常は時間のかかる操作をタスク スレッドで実行し、実行情報をメイン UI スレッドに表示します。
タスクスレッドのメインUIスレッドでコントロールを直接操作する場合、例外を発生させて「コントロールを作成したスレッドの値は他のスレッドでは変更できない」と報告することが非常に簡単になります。コンパイラによるクロススレッド アクセスのチェックを禁止すると、エラーは報告されませんが、予期しない問題が発生する可能性があります。現時点では、委任または匿名委任を使用することをお勧めします。

以上がC#/.NET でよくあるいくつかの間違いの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

C# の雇用の見通しはどのようなものですか? C# の雇用の見通しはどのようなものですか? Oct 19, 2023 am 11:02 AM

初心者でも経験豊富なプロフェッショナルでも、C# をマスターすることでキャリアへの道が開かれます。

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

現在、人工知能(AI)技術の開発は本格化しており、さまざまな分野で大きな可能性と影響力を発揮しています。本日、Dayao は、参考にしていただけるよう、4 つの .NET オープン ソース AI モデル LLM 関連プロジェクト フレームワークを共有します。 https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel は、OpenAI、Azure などの大規模言語モデル (LLM) を統合するように設計されたオープン ソース ソフトウェア開発キット (SDK) です。

開発者向けの .NET パフォーマンス最適化テクノロジ 開発者向けの .NET パフォーマンス最適化テクノロジ Sep 12, 2023 am 10:43 AM

.NET 開発者は、高品質のソフトウェアを提供するために機能とパフォーマンスを最適化することの重要性を認識する必要があります。提供されたリソースを巧みに活用し、Web サイトの読み込み時間を短縮することで、ユーザーに快適なエクスペリエンスを提供するだけでなく、インフラストラクチャのコストも削減できます。

Java フレームワークと .NET フレームワークのパフォーマンスの違い Java フレームワークと .NET フレームワークのパフォーマンスの違い Jun 03, 2024 am 09:19 AM

同時実行性の高いリクエスト処理の点では、.NETASP.NETCoreWebAPI は JavaSpringMVC よりも優れたパフォーマンスを発揮します。その理由としては、AOT の早期コンパイルにより起動時間が短縮され、開発者がオブジェクト メモリの割り当てと解放を行うため、より洗練されたメモリ管理が行われます。

c#.netインタビューの質問と回答:専門知識を高める c#.netインタビューの質問と回答:専門知識を高める Apr 07, 2025 am 12:01 AM

C#.NETインタビューの質問と回答には、基本的な知識、コアの概念、高度な使用が含まれます。 1)基本知識:C#は、Microsoftが開発したオブジェクト指向言語であり、主に.NETフレームワークで使用されています。 2)コアの概念:委任とイベントは動的な結合方法を可能にし、LINQは強力なクエリ関数を提供します。 3)高度な使用:非同期プログラミングは応答性を向上させ、式ツリーは動的コード構造に使用されます。

高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース 高度なC#.NETチュートリアル:次のシニア開発者インタビューをエース Apr 08, 2025 am 12:06 AM

C#シニア開発者とのインタビューでは、非同期プログラミング、LINQ、.NETフレームワークの内部作業原則などのコア知識をマスターする必要があります。 1.非同期プログラミングは、非同期を通じて操作を簡素化し、アプリケーションの応答性を向上させるのを待ちます。 2.LinqはSQLスタイルでデータを操作し、パフォーマンスに注意を払います。 3.ネットフレームワークのCLRはメモリを管理し、ガベージコレクションに注意して使用する必要があります。

C#.NET:コアの概念とプログラミングの基礎を探る C#.NET:コアの概念とプログラミングの基礎を探る Apr 10, 2025 am 09:32 AM

C#は、Microsoftによって開発された最新のオブジェクト指向プログラミング言語であり、.NETフレームワークの一部として開発されています。 1.C#は、カプセル化、継承、多型を含むオブジェクト指向プログラミング(OOP)をサポートしています。 2。C#の非同期プログラミングは非同期を通じて実装され、適用応答性を向上させるためにキーワードを待ちます。 3. LINQを使用してデータ収集を簡潔に処理します。 4.一般的なエラーには、null参照の例外と、範囲外の例外インデックスが含まれます。デバッグスキルには、デバッガーと例外処理の使用が含まれます。 5.パフォーマンスの最適化には、StringBuilderの使用と、不必要な梱包とボクシングの回避が含まれます。

Webからデスクトップまで:C#.NETの汎用性 Webからデスクトップまで:C#.NETの汎用性 Apr 15, 2025 am 12:07 AM

c#.netisversatileforbothwebanddesktopdevelopment.1)forweb、useasp.netfordynamicapplications.2)fordesktop、equindowsorwpfforrichinterfaces.3)usexamarinforcross-platformdeveliment、enabling deshacrosswindows、

See all articles