0

いくつかの機能を公開するために、数ミリ秒ごとに呼び出される Web サービスを使用しています。基本的に、これらの機能はストア プロシージャに基づいており、すべてのメソッドは次のようになります。

[WebMethod]
public bool CheckMessageForMES( out int returnCode, out int messagePK, out String messageBody, out bool isRowFetched )
    {
        using ( SqlConnection connection = new SqlConnection() )
        {
            using(SqlCommand command = _dl.GetSqlCommandForStoredProcedure(DataLayer.SP_NAME, connection)){

            SqlParameter parameterReturnCode = _dl.CreateParameter("@returnCode", DbType.Int16, ParameterDirection.Output);
            SqlParameter parameterMessagePK = _dl.CreateParameter("@messagePK", DbType.Int32, ParameterDirection.Output);
            SqlParameter parameterMessageBody = _dl.CreateParameter("@messageBody", DbType.Xml, ParameterDirection.Output);
            SqlParameter parameterIsRowFetched = _dl.CreateParameter("@isRowFetched", DbType.Int16, ParameterDirection.Output);

            SqlParameter[] parameters = {
                                            parameterReturnCode,
                                            parameterMessagePK,
                                            parameterMessageBody,
                                            parameterIsRowFetched
                                        };

            command.Parameters.AddRange(parameters);

            connection.Open();

            using (SqlDataReader r = command.ExecuteReader() )
            {
                r.Close();
            }

            connection.Close();

            returnCode = int.Parse(parameterReturnCode.Value.ToString());
            messagePK = int.Parse(parameterMessagePK.Value.ToString());
            messageBody = parameterMessageBody.Value.ToString();
            isRowFetched = int.Parse(parameterIsRowFetched.Value.ToString()) > 0;
        }
 }

        return isRowFetched;
    }

Web サーバー プロセスはメモリを消費し、解放されません。VS10 ツールを使用すると、問題は command.ExecuteReader() にあるようです。なぜなのかご存知ですか?

私はこの方法を正しい方法で実装していますか?

ありがとう!

4

1 に答える 1

1

読み取ったデータ行を使用することはないため、データリーダーExecuteNonQueryの代わりに使用する必要があります。

于 2012-07-31T10:02:29.140 に答える