1

まず第一に、私は初心者のプログラマーです。私は AutoHotkey スクリプト、一連の c# と一部または c++ を学びました。私の質問は、言語や構文に固有のものではなく、より概念的なものです。状況を説明することから始めます (すべてのコードは疑似コードと同様に解釈する必要があります)。

私の最新のプロジェクトは、サーバーとクライアントを備えたインスタント メッセンジャーのようなプログラムです。それらは次のように機能します。

サーバ

  • クライアント情報を 3 つの異なる配列に割り当てます (これは好きではありません)
    • NewConnection[skt]、userNick[ニック]、nickFromSocket[skt]

クライアント

  • サーバーにメッセージを送信 > サーバーが受信 > サーバーが応答 > クライアントがメッセージを受信し、チャット ログに記録します。

配列 'userNick' が、従来のインデックス番号 (userNick[index]) の代わりにユーザーの実際のニックネームを使用していることに既にお気付きでしょう。これは重要で、次のように機能します。

// New user has connected
skt  = WINSOCK_getSkt()
NewConnection[skt]  // Simple to parse with a loop: NewConnection.MaxIndex()

// Receive new user's nickname
skt  = WINSOCK_getSkt()
nick = WINSOCK_getNick()
userNick[nick]      = nick
nickFromSocket[skt] = nick

ユーザーのニックネームを 2 回割り当てる理由は、ループを使用して配列を解析することを避けるためです。クライアントがサーバーにメッセージを送信すると、サーバーはソケット番号 (各ユーザーに固有) を確認でき、その変数を使用して、2 つの短い行からユーザーのニックネームを即座に取得できるため、これは簡単で実現できます。

// Get user's nickname
skt  = WINSOCK_getSkt()
nick = nickFromSocket[skt]

今まですべてが明確であることを願っています。

質問

これらすべてをクラスに変換しながら、配列からデータを取得する速度を維持するにはどうすればよいでしょうか? クラスの操作がはるかに簡単で、論理的であることはわかっていますが、解析するユーザーがますます増えると、クラスの効率が低下するのではないかと心配しています。オブジェクト/クラスに同等のものはありますか? ここまでお読みいただき、ありがとうございました。

4

1 に答える 1

2

はい、クラスが必要です。お気に入り

class User
{
    public string Nick { get; set; }
    public Socket Sock { get; set; }  // not sure about this type
    ...
}

次に、実際のニーズに応じて、List<User>および/またはを使用しますDictionary<Connection, User>

于 2012-09-30T23:26:40.743 に答える