2011-12-20 7 views
2

私の背景はWebアプリケーション(PHP)であり、ページをリクエストし、そのリクエストを処理するためのコードを実行してプロセスが終了しました。一般的に、ページを読み込んだ後に処理が行われるため、変数やそのような設定が必要です。ウェブアプリケーションからデスクトップアプリケーションへ

C#でデスクトップアプリケーションの開発を調べると、これがWebとどのように異なるのか不思議です。私はプログラムを起動すると、ユーザーがいくつかのアクションを行う、プログラムは、Webアプリケーションのように行われていない、だからあなたはどうやって別の?あなたは、メモリを無駄にするのを防ぐために変数や仕掛けを終えたときに、設定を解除することを意識しなければなりませんか?

+1

ほとんどの場合(少なくとも質問のタグが付いているC#では、他の環境でも)、組み込みのガベージコレクションは未使用のリソースの割り当てを非常にうまく処理します。間違ってメモリリークを作成することもできますが、ウェブ上で簡単に行うこともできます。 – David

+3

一般に、パフォーマンスはおそらく最大のハードルにはならないでしょう。接続されていないステートレス要求 - 応答システムと実行中のアプリケーションとの間のコグニティブスイッチは大きなものです。私はしばしば、他の方向へのスイッチを作るときに人々が苦労しているのを見ます。 – David

答えて

1

ほとんどのウェブプログラミングはです。ステートレスです。デスクトッププログラミングでは、個々の機能は通常ステートレスです。あなたは必要な情報をすべてパラメータとして渡し、必要なものすべてを手に入れます。しかし、メインプログラムにはいくつかの状態が保存されます。

リッチインターネットアプリケーションは、多くの場合、状態を維持し、いくつかのウェブサイトは

デスクトッププログラミングのユーザーインターフェイスが似ているなど、状態としてHTMLコンテンツ自体を使用し、とJavascriptを通してそれを更新します。編集やその他のさまざまなコントロールにはいくつかの状態が保存されます。あなたはセッション変数に似ていると考えることができるユーザ設定のようなものに対していくつかのグローバル変数を保存します。アプリケーションを実行することはセッションを持つことに似ています。

デスクトッププログラミングも非常にイベントベースです。かなり頻繁に、プログラムがボタンや何かをクリックするのを待って座っています。ですから、通常はWindowsとイベントハンドラについて話しています。 Javascriptでこれらをよく知っているかもしれません。

C#ではガベージコレクションが行われるため、変数の削除を心配する必要はありません。彼らが範囲外に出るとすぐに、彼らは通常クリーンアップされます。グローバルクラス変数は、アプリケーションがシャットダウンされるまでクリーンアップされず、アプリケーションをシャットダウンするときに変数をクリアする必要はありません。 PHPのように、プロセスが終了するとすべて消えてしまいます。

ローカル変数を使用する必要がある場合は、関数内でグローバル変数(スコープ外にならない)を使用しないでください。

PHPにはローカル変数とグローバル変数もありますので、これはおなじみの領域です。

+0

私は見ることができるから、それはすべてが名前空間=>クラス=>メソッドの一部だと思うので、C#でグローバル変数と見なされるものは、変数が常に内部にあることがわかりますクラスやメソッド、それではグローバルを定義する方法はありますか? – JasonDavis

+0

静的として定義すると、それらはグローバルとみなされますが、NSとクラスの下に置くこともできますが、インスタンスベースではありません。 – Kumar

2

短い答えははいです。イベントハンドラの登録を解除したり、オブジェクトを破棄したり、強い参照を削除したりする必要があります。どのように見えるかは、コードの構造によって異なります。

1

はい、心配する必要があります。管理オブジェクトがガベージコレクタによって処理されるため、主にアンマネージオブジェクトについて心配する必要があります。

関連する問題