タグ付けされた質問 「c#」

C#は、Microsoftが.NETプラットフォームと並行して作成した、マルチパラダイムで管理されたガベージコレクションのオブジェクト指向プログラミング言語です。

2
スレッドがwhileループ内でタスクを待機すると、正確にはどうなりますか?
しばらくC#の非同期/待機パターンを処理した後、次のコードで何が発生するかを説明する方法が本当にわからないことに突然気づきました。 async void MyThread() { while (!_quit) { await GetWorkAsync(); } } GetWorkAsync()Task継続が実行されたときにスレッド切り替えを引き起こす場合とそうでない場合があるawaitableを返すと想定されます。 待機がループ内になかったとしても、混乱することはありません。私は当然、メソッドの残りの部分(つまり、継続)が別のスレッドで実行される可能性があることを期待しています。 ただし、ループ内では、「メソッドの残りの部分」の概念が少し曖昧になります。 スレッドが継続で切り替えられた場合と切り替えられなかった場合の「ループの残りの部分」はどうなりますか?ループの次の反復はどのスレッドで実行されますか? 私の観察では、各反復が同じスレッド(元のスレッド)で開始され、継続が別のスレッドで実行されていることが(最終的に検証されていません)示されています。これは本当にあり得ますか?はいの場合、これは、GetWorkAsyncメソッドのスレッドセーフティに対して考慮される必要があるある程度の予期しない並列処理ですか? 更新:一部の人が示唆したように、私の質問は重複ではありません。while (!_quit) { ... }コードパターンは単に私の実際のコードを簡略化したものです。実際には、私のスレッドは、定期的に(デフォルトでは5秒おきに)作業項目の入力キューを処理する長期ループです。実際の終了条件チェックも、サンプルコードで提案されている単純なフィールドチェックではなく、イベントハンドルチェックです。
10 c#  loops  async 

2
「using」ディレクティブと「using」ステートメントがC#で同じキーワードを使用するのはなぜですか?
usingディレクティブは、彼らの完全修飾名を使用せずに、私たちのタイプへのアクセスを提供します: using MyNamespace.Foo.Bar; using声明はのためのシンタックスシュガーとして機能try/ finallyオブジェクトは適切に処分されていることを確認したブロック: using(var x = new MyDisposableClass()) { ... } これら2つの状況は、互いに何の関係もないようです。同じキーワードを使用するのはなぜですか? 2つのケースが混同されることはないでしょうが、新しい機能を表す新しい単語を作成しないのは奇妙に思えます。 余談ですがclass、C ++ での二重使用(1つはクラスの宣言、もう1つはテンプレートパラメータの定義)についても読みましたが、2番目のケースは最終的に独自のキーワードを取得typenameしました。
10 c#  statement 

2
暗黙的に別のクラスに変換することのみを目的とするクラスを作成するのは悪いことですか?
Circleオブジェクトを作成できるライブラリを使用していて、円の半径と中心を指定してオブジェクトを定義できる状況を想像してみてください。ただし、何らかの理由で、必要なflavourパラメーターも受け取ります。ここCircleで、自分のアプリで本当に使用する必要があるとしましょう。ただし、アプリの目的で、フレーバーをFlavours.Cardboard毎回に設定できます。 この「解決」をするために、私は自分の作成Circleのみとり異なる名前空間でクラスをradiusし、centerパラメータとしてではなく、外部ライブラリのへの暗黙のコンバータがあるCircleだけで作成したクラスCircle(this.radius, this.center, Flavours.Cardboard)のオブジェクトを。したがって、他のタイプのが必要なすべての場所でCircle、自動変換を実行します。 そのようなクラスを作成するとどうなりますか?より良い解決策はありますか?私のアプリケーションが、この外部ライブラリの上に構築されたAPIであり、他のプログラマーが使用することを目的としていた場合、何か違いはありますか?

3
疎結合コードのインターフェースの使用
バックグラウンド 特定の種類のハードウェアデバイスの使用状況に依存するプロジェクトがありますが、必要なことを行うのであれば、誰がそのハードウェアデバイスを作成するかは重要ではありません。そうは言っても、同じことをするはずの2つのデバイスでも、同じ製造元以外のデバイスでは違いがあります。したがって、インターフェイスを使用して、関連するデバイスの特定のメーカー/モデルからアプリケーションを分離し、代わりに、インターフェイスに最高レベルの機能をカバーさせることを考えています。これが私のアーキテクチャが次のようになると私が考えているものです: 1つのC#プロジェクトでインターフェイスを定義しますIDevice。 別のC#プロジェクトで定義されたライブラリに、デバイスを表すために使用される具象があります。 具体的なデバイスにIDeviceインターフェースを実装してもらいます。 IDeviceインタフェースは次のような方法かもしれないGetMeasurementかをSetRange。 アプリケーションに具象に関する知識を持たせ、具象をデバイスを利用する(実装しない)アプリケーションコードに渡しIDeviceます。 アプリケーションに影響を与えずに、使用中のデバイスを変更できるため(これは時々発生するようです)、これが適切な方法であると確信しています。言い換えると、具象の実装方法GetMeasurementやSetRange具象を通して実際に機能する方法は重要ではありません(デバイスのメーカーによって異なる場合があります)。 私の心の中で唯一の疑問は、今やアプリケーションとデバイスの具象クラスの両方がIDeviceインターフェースを含むライブラリに依存しているということです。しかし、それは悪いことですか? また、デバイスとIDevice同じ名前空間に属していない限り、アプリケーションがデバイスについて知る必要がない方法もわかりません。 質問 これは、アプリケーションとそれが使用するデバイスとの間の依存関係を切り離すためのインターフェースを実装するための正しいアプローチのように思えますか?

3
テスト用のプライベートセッターによるプロパティのスタブ
オブジェクトがあります public class MyObject{ protected MyObject(){} public string Property1 {get;private set;} public string Property2 {get;private set;} public string Property3 {get;private set;} public string Property4 {get;private set;} public string Property5 {get;private set;} public string Property6 {get;private set;} public string Property7 {get;private set;} public string Property8 {get;private set;} public string Property9 {get;private …

4
構成を通じてインターフェースを実装するクラスのボイラープレートを削減する
:私はクラスの持っているA、小さなクラスの数の複合体であるB、CとD。 B、C、およびDインターフェースを実装IB、ICおよびIDそれぞれ。 以来Aのすべての機能をサポートB、CおよびD、A実装IB、ICおよびID同様に、しかし、多くのこの残念ながらリードの実装で再ルーティングA そのようです: interface IB { int Foo {get;} } public class B : IB { public int Foo {get {return 5;}} } interface IC { void Bar(); } public class C : IC { public void Bar() { } } interface ID { string Bash{get; set;} } public …

1
おしゃべりなインターフェースを回避する方法
背景: サーバーアプリケーションを設計し、さまざまなサブシステム用に個別のDLLを作成しています。話を簡単にするために、2つのサブシステムがあるとします。1)Users2)Projects ユーザーのパブリックインターフェイスには、次のようなメソッドがあります。 IEnumerable<User> GetUser(int id); また、Projectsの公開インターフェースには次のようなメソッドがあります。 IEnumerable<User> GetProjectUsers(int projectId); したがって、たとえば、特定のプロジェクトのユーザーを表示する必要がある場合は、呼び出すことができます。これによりGetProjectUsers、オブジェクトがデータグリッドなどに表示するのに十分な情報を返します。 問題: 理想的には、Projectsサブシステムはユーザー情報も保存せず、プロジェクトに参加しているユーザーのIDのみを保存する必要があります。提供するためにGetProjectUsers、それが呼び出す必要GetUserのUsers自身のデータベースに格納された各ユーザーIDのシステム。ただし、これには多数の個別のGetUser呼び出しが必要であり、Userサブシステム内に多数の個別のSQLクエリが発生します。私は実際にこれをテストしていませんが、このおしゃべりなデザインを使用するとシステムのスケーラビリティに影響します。 私はさておき、サブシステムの分離を置けば、私は可能性があり、両方のシステムにより、単一のスキーマアクセス可能で、すべての情報を保存し、Projects簡単に行うことができJOIN、単一のクエリですべてのプロジェクトのユーザーを取得します。クエリ結果からオブジェクトProjectsを生成Userする方法も知っている必要があります。しかし、これは多くの利点を持つ分​​離を壊します。 質問: 誰もがこれらの個別のGetUser呼び出しをすべて回避しながら、分離を維持する方法を提案できますGetProjectUsersか? たとえば、私が考えていたのは、ユーザーが外部システムにラベルと値のペアでユーザーに「タグを付ける」機能を与え、特定の値を持つユーザーに要求することでした。たとえば、 void AddUserTag(int userId, string tag, string value); IEnumerable<User> GetUsersByTag(string tag, string value); 次に、プロジェクトシステムは、プロジェクトに追加された各ユーザーにタグを付けることができます。 AddUserTag(userId,"project id", myProjectId.ToString()); GetProjectUsersの実行中、1回の呼び出しですべてのプロジェクトユーザーをリクエストできます。 var projectUsers = usersService.GetUsersByTag("project id", myProjectId.ToString()); 私がこれについて確信が持てない部分は、はい、ユーザーはプロジェクトにとらわれませんが、実際にはプロジェクトメンバーシップに関する情報はプロジェクトではなくユーザーシステムに保存されます。私は自然に感じないので、ここで私が見逃している大きな欠点があるかどうかを判断しようとしています。

7
ネストされたエンティティとリーフエンティティプロパティの計算-SQLまたはNoSQLアプローチ
メニュー/レシピ管理という趣味のプロジェクトに取り組んでいます。 これは私の実体とそれらの関係がどのように見えるかです。 AにNutrientはプロパティがCodeあり、Value のIngredientコレクションを持っていますNutrients A RecipeにはコレクションがIngredientsあり、時々他のコレクションを持つことができますrecipes Aは、Mealのコレクションを持っているRecipesし、Ingredients A MenuのコレクションがありますMeals 関係は次のように表すことができます いずれかのページで、選択したメニューについて、その構成要素(食事、レシピ、成分、および対応する栄養素)に基づいて計算された有効栄養素情報を表示する必要があります。 現在、SQL Serverを使用してデータを格納しています。メニューの各食事から始めて栄養素の値を集計して、C#コードからチェーンを移動しています。 この計算はページがリクエストされ、構成要素が時々変更されるたびに行われるため、これは効率的な方法ではないと思います。 MenuNutrients({MenuId, NutrientId, Value})と呼ばれるテーブルを維持し、コンポーネント(食事、レシピ、成分)のいずれかが変更されたときに、このテーブルに有効な栄養素を追加/更新するバックグラウンドサービスがあることを考えていました。 GraphDBはこの要件に適していると思いますが、NoSQLへの私の露出は限られています。 特定のメニューの栄養素を表示するというこの要件に対する代替の解決策/アプローチは何ですか? シナリオの説明が明確であることを願っています。

4
単体テストで、なぜリポジトリを2回作成するのですか?
先日、ユニットテストについて少し読んでいて、人々がリポジトリインターフェイス(つまりIExampleRepository)を作成してから、実際のリポジトリ(public class ExampleRepository : IExampleRepository)とユニットテストに使用するリポジトリ()を作成する例をいくつか見ましたFakeExampleRepository : IExampleRepository。 IExampleRepositoryそれらはと同じ方法を実施したExampleRepositoryが、異なるLINQクエリと、。 ここの目的は何ですか?コードの単体テストの一部は、メソッドが正しく機能することを確認することだと思いましたか?しかし、「実際の」クエリとテスト内のクエリの2つのまったく異なるクエリを使用すると、テストはどの程度意味がありますか?


1
アプリケーションのメモリ使用量を改善するにはどうすればよいですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 4年前休業。 私はC#アプリケーションを作成していますが、アプリケーションの実行時間の増加に伴ってメモリ使用量が増加しているのがわかります。 アプリケーションのメモリ使用量を監視し、メモリリークを特定して、一般的にアプリケーションのメモリ使用量を改善できるツールやテクニックはありますか?
10 c#  memory-usage 

3
ASP.NET WebFormsアプリケーションに最適なアーキテクチャ
クライアント用のASP.NET WebFormsポータルを作成しました。プロジェクトは、最初から適切に計画および構造化されているのではなく、ある程度進化しています。その結果、すべてのコードが同じプロジェクト内でレイヤーなしでまとめられます。クライアントは機能に満足しているので、プロジェクトのリリースに自信を持つようにコードをリファクタリングしたいと思います。アーキテクチャの設計にはさまざまな方法があるようですが、最善の方法についていくつかの意見をお願いします。 機能性 ポータルでは、管理者がHTMLテンプレートを構成できます。他の関連する「パートナー」は、IFrameコードをサイトに追加することにより、これらのテンプレートを表示できます。これらのテンプレート内で、顧客は製品を登録および購入できます。APIはWCFを使用して実装されており、外部の企業もシステムとインターフェイスできます。管理者セクションでは、管理者がさまざまな機能を設定し、各パートナーのレポートを表示できます。システムは請求書と電子メール通知を顧客に送信します。 現在のアーキテクチャ 現在、データベースへの読み取り/書き込みにEF4を使用しています。EFオブジェクトは、aspxファイル内で直接使用されます。これにより、サイトを作成している間、迅速な開発が容易になりましたが、dbとUIを密に結合しているため、このように維持することはおそらく受け入れられません。特定のビジネスロジックがEFオブジェクトの部分クラスに追加されました。 質問 リファクタリングの目標は、サイトをスケーラブルで、簡単に保守でき、安全にすることです。 これにはどのようなアーキテクチャが最適ですか?各レイヤーに何があるべきか、DTO / POCO /アクティブレコードパターンを使用する必要があるかどうかなどを説明してください。 DTO / BOを自動生成する強力な方法があるので、追加のレイヤーがあっても、将来の拡張は簡単に実装できますか? プロジェクトをWebFormsからMVCに変換することは有益でしょうか?

4
ドラッグ&ドロップUIでリストアイテムの並べ替え順序を管理する最良の方法は何ですか?
表形式でWebページに表示する必要がある生徒のリストがあります。 アイテムは、SortOrder情報とともにDBに格納されます。 この投稿のように、ユーザーはWebページで、アイテムを希望の並べ替え順序にドラッグアンドドロップして、リストの順序を並べ替えることができます。 以下は、私のテストページのスクリーンショットです。 上記の例では、各行に並べ替え順序情報が添付されています。John Doe(学生ID 10)を学生ID 1の行の上にドロップすると、リストの順序は2、10、1、8、11になります。 ソート順情報を保存および更新するための楽観的な(リソースを節約する)方法は何ですか? 私の現時点での唯一のアイデアは、リストの並べ替え順序が変更されるたびに、すべてのオブジェクトのSortOrder値を更新する必要があるということです。 参考までに:テーブルに最大25行ある可能性があります。
10 c#  sorting 

6
プログラミング言語の直交性を検証/証明する方法は?
私は直交性の概念を知っていますが、プログラミング言語の観点から、それを検証/証明する方法はありますか? たとえば、C#では、メソッドのシグネチャとして、publicまたはstaticメソッドシグネチャを使用できます。どちらか一方または両方を使用でき、それらは互いに干渉しないので、互いに直交していますよね? 私の質問は、残りの機能、特に互いに関連しない機能についてはどうすればよいですか? すべての機能が共存/スタックする必要がありますか? 100%直交するプログラミング言語はありますか?

3
分散ロックパターンを探す
C#の分散システム用のカスタム再帰オブジェクトロックメカニズム\パターンを考え出す必要があります。基本的に、私はマルチノードシステムを使用しています。各ノードは、n個の状態に対して排他的な書き込み権限を持っています。同じ状態が、少なくとも1つの他のノードで読み取り専用形式でも利用できます。一部の書き込み/更新はすべてのノードでアトミックである必要がありますが、他の更新はバックグラウンドのレプリケーションプロセスやキューなどを通じて最終的に整合性が取れます... アトミック更新では、オブジェクトを書き込み用にロックされているものとして効率的にマークして、配布、コミット、ロールバックなどを実行できるパターンまたはサンプルを探しています。システムには高レベルの同時実行性があるため、ロックが解除されるとタイムアウトになるか、アンロールされるロックをスタックできるようにする必要があると思います。 トランザクションまたはメッセージングの部分はこの質問の焦点では​​ありませんが、いくつかの追加のコンテキストのためにそれらを提供しました。とはいえ、必要に応じてどのようなメッセージが必要だと思うかを自由に説明してください。 これは、私が想像していたものの漠然としたサンプルですが、まったく新しい製品を実装することを除いて、新しいアイデアを受け入れることができます。 thing.AquireLock(LockLevel.Write); //Do work thing.ReleaseLock(); 次のような拡張メソッドの使用を考えていました public static void AquireLock(this IThing instance, TupleLockLevel lockLevel) { //TODO: Add aquisition wait, retry, recursion count, timeout support, etc... //TODO: Disallow read lock requests if the 'thing' is already write locked //TODO: Throw exception when aquisition fails instance.Lock = lockLevel; } …

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.