プログラムが不足しています。 object = null
が「処理された」と設定した理由は分かりません。C#プログラムが不足しています
foreach (DataRow theRow in thisDataSet.Tables["Collection"].Rows)
{
LS_BatchAID = Convert.ToString(theRow["BatchAID"]);
LS_Batch = Convert.ToString(theRow["Batch"]);
LS_ID = Convert.ToString(theRow["ID"]);
CL_Batch Batch = new CL_Batch(LS_BatchAID, LS_ID, LS_Batch);
Batch = null;
}
thisConnection.Close();
私はこのエラーを取得:プログラムを実行し、タスクマネージャを見ながらSystem.OutOfMemoryExceptionには」がmscorlib.dll で発生した、私はコードの反復回数に対応して直線的にメモリ消費の上昇を見ることができます。
は、どのように私はダンプ/メモリ消費量を増加させないプログラムを作成することが出来るのですか?
CL_Batch:
class CL_Batch
{
private string BatchAID;
private string ID;
private string Batch;
private string pathPDF;
private string pathCPR;
private string pathLog;
private string DateXMLGenerated;
private string[] IDType;
private string[,] IDTypes;
private string[] Files;
private DateTime Dates;
private byte[] pdfContent;
private string XMLContent;
private string[] RefNbr;
public CL_Batch(string IV_BatchAID, string IV_ID, string IV_Batch)
{
this.Dates = DateTime.Now;
this.DatoXMLGenerated = "" + Dato.Date.Year.ToString() + "-" + BuildNumber(true, 2, Dato.Date.Month.ToString()) + "-" + BuildNumber(true, 2, Dato.Date.Day.ToString()) + "";
this.BatchAID = IV_BatchAID;
this.ID = IV_ID;
this.Batch = IV_Batch;
this.pathPDF = @"C:\path\TempFiles\path\" + this.ID + ".Pdf";
this.pathCPR = @"C:\path\TempFiles\";
this.pathLog = @"C:\path\Log\" + this.Batch + ".txt";
setRefnbr();
// Set array with mappings of ID between partners.
setLegitimationsTyper();
// ensure log is available ([NameOfLog]).
prepareLog();
// Find all files for archive.
getFileNames();
// Move files C:\path\TempFiles\
if (this.getFiles() == true)
{
// Create PDF's.
makePDF();
// Insert PDF's in database.
insertPDF();
// Create XML files.
makeXML();
// Insertt XML in database.
insertXML();
}
public string getBatchAID()
{
return this.BatchAID;
}
public string getID()
{
return this.ID;
}
public string getBatch()
{
return this.Batch;
}
public string getIDTyper(string IV_Code, bool kode)
{
for (int i = 0; i <= this.IDTypes.GetUpperBound(0); i++)
{
if (this.IDTypes[i, 0] == IV_Kode)
{
if (Code == true)
{
return this.LegitimationsTyper[i, 1];
}
else
{
return this.LegitimationsTyper[i, 2];
}
}
}
return "";
}
}
/******************************************/
/** UPDATE#1 **************************/
十分フェア!コンストラクタの誤用。私はポイントを得る - しかし、: 本当に問題は何ですか?
私はすでにこの例に対して行っているように私が行う場合:
CL_Batch Batch = new CL_Batch(LS_BatchAID, LS_ID, LS_Batch);
Batch.setRefnbr();
Batch.setIDTypes();
Batch.prepareLog();
Batch.getFileNames();
Batch.makePDF();
Batch.insertPDF();
Batch.makeXML();
Batch.insertXML();
Batch = null;
その後、本当の違いは何ですか? 2つの数字を追加する方法が異なる場合は、同じ手順で終了します。
First program:
xor ax, ax
mov ax, 10
add ax, 10
Second program:
xor ax, ax
mov ax, 10
add ax, 10
私はそれを参照してください方法最終的に違いはありません(私はOOPの概念を誤用が、最終生成物が同じであること偵察 - 私は期待して)
私の妄想について私にアドバイスをしてください。
ありがとうございます。 /** UPDATE#1/ /****************************************私たちはあなたのコードを見ることができないため、**/
CL_Batchは何ですか? – BugFinder
あなたのスニペットを 'foreach'に減らすことは、私たちの騒音を最小限にする方法ではありません。クラス全体のノイズを減らし、このクラスを減らした方がいいでしょう。あなたのforeachループではありません –
あなたの問題はあなたのメモリ内の文字列の周りにあるかもしれませんが、実際の答えを見つけるためにこれをプロファイルする必要がありますdotMemoryまたは同様のものを使用する –