2009-04-24 8 views
2

確かに、NETとT/SQLのストアドプロシージャの作成を選択すると、コンテキストの切り替え、マーシャリング、シリアル化などが行われます。Sql Server上で実行される.NETストアドプロシージャに関連するオーバーヘッドは何ですか?

.NETとストアドプロシージャのT/SQLの使用に関する決定に関連して、このオーバーヘッドに関する厳しい事実はありますか?

決定を下すためにどのような要素を使用していますか?

私の場合、C#での開発は学習曲線のためにT/SQLで開発するよりも1000%高速ですが、このゲインがいつパフォーマンスヒットを打ち消すことはありませんか?

+0

ないの質問に関連し批判していないが、しかし、あなたがC#で1000%高速化している場合、それはおそらくあなたの学習曲線上のいくつかの時間を費やす価値があります。 SPは一般に80%のSQLであり、いずれにしても必要です。 – dkretz

+0

@le dorfier - 私は複雑なsqlをとてもうまく使っていますが、宣言、条件文、代入、ループ、カーソルなどを実行するt/sqlの方法ではない...私はそれを頻繁にはしないので、毎回単純なt/sqlの例を検索する必要があります。 – TheSoftwareJedi

答えて

2

私はそれが依存していると思います。ネイティブの.NETオブジェクトを使用して

  1. あなたはCLRのprocedresを使用しています

    いくつかのものが優れている - ファイルシステム、ネットワークなどの.NET電子良いとしてTQLによって提供されていない機能やないを使用して

  2. 。DEFまたはABCない中でセットベースのロジック(ABCを使用して、あなたが使いやすさの面でまたは生のいずれかで、TSQL手順が優れているでしょう、まだ他の人のためにグラム正規表現

実行速度

  1. GHI)
  2. CRUD操作
2

オーバーヘッドは、データがデータベースに存在しない限り、スイッチング、マーシャリングなどとは関係ありません。

私は、T-SQLでは可能な限り多くのストアドプロシージャを実行することはほとんどありませんが、ORMでラップされています。

本当に、それはそこへの答えです。エンティティフレームワーク、NHibernate、Linq to SQLなどを調べてください。ストアドプロシージャを書き留めてください(私は現在ダウンボートを聞くことができます)。C#でそれを行います。

EDIT:追加情報を追加 ストアドプロシージャは(本質的にデータにバインドされた)テストするのが難しく、動的SQLよりもスピードの利点はありません。つまり、ソートやフィルタリングのようなものでは、リレーショナルデータベースはC#よりも効率的です。

しかし、ストアドプロシージャを使用する必要がある場合(時間がある場合)は、できるだけTSQLを使用してください。あなたが実行する必要があるsubstitution量のロジックがある場合、それはベースに設定されていないので、C#を打ち破ってください。

私がこれをやったのは、データベースに余分な日付処理を追加することでした。私が使っていた会社は、5-4-4週ごとの会計カレンダーを使いました。それはSQLではほとんど不可能でした。だから私はそのためにC#を使いました。

+1

あなたは間違って聞いた。 upvoteが登場する! ;-) – Cerebrus

+1

私の質問に対する正式な答えは「ストアドプロシージャを使用しない」ですか?それはあまり答えではありません。 – TheSoftwareJedi

+0

彼らは互いに打ち消し合うようです。 :) 他の人にとっては、ormを提案することは、あなたがこのサイトで行うことができる最も挑戦的なことであるようです。 –

1

これは一種の宗教的な質問ですが、何をやっているのか、スキーマ、それに何レコードを使っているのかによってはかなりの違いがあります。テストは実際にあなたの状況を把握する最良の方法です。

一般的に、格納されたprcoeduresは拡張されます。それはあなたの場合には当てはまらないかもしれませんが、それはあなたにとって重要な考慮事項ではないかもしれません。

関連する問題