none
C#のプログラムをサーバ側で動かすには? RRS feed

  • 質問

  • 先日、初めてC#を使うことになり、データベースにクインタイル値を挿入するプログラムを作成することになりました。

    そこで質問があります。
    無事にクインタイルを実行するプログラムはできたのですが、レコード数が数十万件あるため、クライアント側では処理したくありません。
    どのようにすればサーバ側で処理できるでしょうか?
    現在はサーバにあるデータベースに、クライアント側にあるC#のプログラムでアクセスし、クインタイル値を出し書き込んでいます。

    質問するにあたり足りない情報等もあると思いますが、そちらもご指摘お願いいたします。

    2010年5月26日 9:23

回答

  • 「サーバ」「クライアント側」というのは何を指すのでしょうか?

    例えば「サーバ」が「サーバマシン」を指すのであれば、クライアントプログラムをサーバマシン上で動作させるだけですし、
    「(データベース)サーバプロセス」を指すのであれば、…うーん、使用しているデータベースエンジンに依るでしょう。
    その場合、一般的にはC#ではなくストアドプロシージャで記述すればよいのでは、となります。

    データベースエンジンとしてSQL Server 2005以降を使用されているのであればSQLCLRを使用することで、
    C#言語を使用して関数を作成できます。

    • 回答としてマーク 藍狐 2010年5月28日 1:15
    2010年5月26日 11:34
  • 正確には、
    「C#ってメモリとかCPUとかをクライアント側のPCとサーバ側とで指定して実行できるの?」
    という質問に対し答えられなかったため、その解答を探しています。

    C# に限らず、できません。

    また、不可能な場合の解決策についても考えています。

    たとえば、サーバーマシンでサーバープロセスを常駐させて、そいつにあるリクエストを投げることでクライアントでやるつもりだった仕事を任せることができれば、やりたいことはできますよね。
    ただし、今、クライアントで実行する形態になっているものを、さくっと分割できるわけではありません。サーバーとクライアントにプログラムを分割したり、ネットワークの負荷などを考慮したりするなど、検討が必要な項目が多数出てくると思います。

    そもそもの問題として、マシンによってばらつく処理が”重たい処理”なのであれば、サーバーマシンに負荷を集中させるとあっさりとパンク(ダウン)すると思います。
    なので、サーバー - クライアント方式を求めるのが本当に正しいのか、検証する必要があると思います。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 藍狐 2010年5月28日 1:14
    2010年5月27日 14:26
    モデレータ

すべての返信

  • 「サーバ」「クライアント側」というのは何を指すのでしょうか?

    例えば「サーバ」が「サーバマシン」を指すのであれば、クライアントプログラムをサーバマシン上で動作させるだけですし、
    「(データベース)サーバプロセス」を指すのであれば、…うーん、使用しているデータベースエンジンに依るでしょう。
    その場合、一般的にはC#ではなくストアドプロシージャで記述すればよいのでは、となります。

    データベースエンジンとしてSQL Server 2005以降を使用されているのであればSQLCLRを使用することで、
    C#言語を使用して関数を作成できます。

    • 回答としてマーク 藍狐 2010年5月28日 1:15
    2010年5月26日 11:34
  • 返信ありがとうございます。
    拙い説明しかできず、申し訳ありません。

    性能にばらつきのあるクライアント側のPCで処理を行った場合、終了するまでの時間にも大きくばらつきが出ます。そのため、サーバ側で動かしたいのでサーバマシン上で動作させる、ということだと思います。
    クライアント側のPCからサーバ上でプログラムを実行させたいのですが、その方法を探しています。

    正確には、
    「C#ってメモリとかCPUとかをクライアント側のPCとサーバ側とで指定して実行できるの?」
    という質問に対し答えられなかったため、その解答を探しています。
    また、不可能な場合の解決策についても考えています。

    私も質問した方もC#等のプログラムやSQL Serverに詳しくないため、悩んでいます。
    至らないところだらけですが、ご回答よろしくお願いします。

    2010年5月27日 1:14
  • 正確には、
    「C#ってメモリとかCPUとかをクライアント側のPCとサーバ側とで指定して実行できるの?」
    という質問に対し答えられなかったため、その解答を探しています。

    C# に限らず、できません。

    また、不可能な場合の解決策についても考えています。

    たとえば、サーバーマシンでサーバープロセスを常駐させて、そいつにあるリクエストを投げることでクライアントでやるつもりだった仕事を任せることができれば、やりたいことはできますよね。
    ただし、今、クライアントで実行する形態になっているものを、さくっと分割できるわけではありません。サーバーとクライアントにプログラムを分割したり、ネットワークの負荷などを考慮したりするなど、検討が必要な項目が多数出てくると思います。

    そもそもの問題として、マシンによってばらつく処理が”重たい処理”なのであれば、サーバーマシンに負荷を集中させるとあっさりとパンク(ダウン)すると思います。
    なので、サーバー - クライアント方式を求めるのが本当に正しいのか、検証する必要があると思います。


    質問スレッドで解決した場合は、解決の参考になった投稿に対して「回答としてマーク」のボタンを押すことで、同じ問題に遭遇した別のユーザが役立つ投稿を見つけやすくなります。
    • 回答としてマーク 藍狐 2010年5月28日 1:14
    2010年5月27日 14:26
    モデレータ
  • ご返信ありがとうございます。
    ご丁寧な解説、痛み入ります。

    知りたいことが分かりました。
    また問題点の指摘もいただけたので、それを含め再度検討してみようと思います。

    佐祐理さん、Azuleanさん
    大変参考になりました、ありがとうございます。

    2010年5月28日 1:14