1

大きな文字列を作成する次のコードがあります。すべてのタスクを完了するのに約2秒かかりますが、実稼働サーバーに配置すると、未知のものに応じて10〜20秒かかります。時間は、TimePoint1 から TimePoint2 までで計算されます。

ところで: abstractTable.GetWordCountInList(listID) には 1 行しか含まれていません: return 100;

これを除いて、本番サーバーの他のすべての機能は問題なく動作します。Oracle DB サーバーと Web サーバーは同じマシン上にあり、クエリは約 5000 レコードを返します。製品サーバーのデータは開発サーバーと同じです。

public const string WordXMLItemTemplate = @"<S I=""{0}"" W=""{1}"" L=""{2}"" F=""0"" P=""0"" />";   

int totalCounter =0;
int wordCounter = 0;
int listID = 1;
OracleConnection wordLibConn = ConnectionManager.GetNewConnection();
wordLibConn.Open();
try
{
    OracleCommand comm = new OracleCommand();
    comm.Connection = wordLibConn;
    comm.CommandText = "Select WordID from WordTable Order By Lower(Word) ASC";
    OracleDataReader dataReader = comm.ExecuteReader();
    try
    {
        // TimePoint 1
        while (dataReader.Read())
        {
            totalCounter++;
            wordCounter++;
            wordXML = wordXML + string.Format(WordXMLItemTemplate, totalCounter, dataReader[0].ToString(), listID);
            if (wordCounter % abstractTable.GetWordCountInList(listID) == 0)
            {
                wordCounter = 0;
                listID++;
            }
        }
    }
    finally
    {
        dataReader.Close();
    }
}
finally
{
    wordLibConn.Close();
}
// TimePoint 2

私は何ヶ月も問題に苦しんでいました。アドバイスをありがとう。

4

1 に答える 1

0

この速度低下の原因となる可能性のある行またはコード フラグメントのリストを作成してください。それらすべてを測定し、測定結果を見てください。失速の原因となっている正確な場所を見つけて、解決策に近づけることを願っています。

于 2013-09-07T03:01:13.803 に答える