0

私のメモリは4GBです(2.99GBは使用可能ですが、理由はわかりません)。プロジェクト C# Visual Studio 2010 で Bluebit ライブラリを使用して Matrix を処理し、Windows フォーム アプリケーションでコードを実行し、データベースに接続した後、NotEnoughMemoryException (実行を続行するための十分なメモリがありません) が発生し、物理的に使用されているメモリが 2.14GB である、ただし、コンソール アプリケーションでコードを単独で使用すると、例外は表示されません。

StreamWriter aWr = new StreamWriter("aMatrix.mtx");
Matrix aMatrix = new Matrix(termsList.Count, Docs.Count);
/////load aMatrix from DataBase and aMatrix[8200, 40]

SVD svd = new SVD(aMatrix);
StreamWriter sWr = new StreamWriter("sMatrix.mtx");
Matrix S = svd.S.SubMatrix(0, k - 1, 0, k - 1);
for (int row = 0; row < S.Rows; row++)
{
        for (int col = 0; col < S.Cols; col++)
            sWr.Write(S[row, col] + "\t");
        sWr.Write("\n");
}
sWr.Close();

StreamWriter uWr = new StreamWriter("uMatrix.mtx");
Matrix U = svd.U;
nt endRaws = U.Rows - 1;
U = U.SubMatrix(0, endRaws, 0, k - 1);
for (int row = 0; row < U.Rows; row++)                                                      
{
    for (int col = 0; col < U.Cols; col++)
        uWr.Write(U[row, col] + "\t");
    uWr.Write("\n");
}
uWr.Close();

StreamWriter vWr = new StreamWriter("vMatrix.mtx");
Matrix V = svd.V;
endRaws = V.Rows - 1;
V = V.SubMatrix(0, endRaws, 0, k - 1);
for (int row = 0; row < V.Rows; row++)
{
    for (int col = 0; col < V.Cols; col++)
        vWr.Write(V[row, col] + "\t");
    vWr.Write("\n");
}
vWr.Close();

StreamWriter vtWr = new StreamWriter("vtMatrix.mtx");
Matrix VT = new Matrix(V.Cols, V.Rows);
for (int row = 0; row < V.Rows; row++)
    for (int col = 0; col < V.Cols; col++)
        VT[col, row] = V[row, col];

for (int row = 0; row < VT.Rows; row++)
{
    for (int col = 0; col < VT.Cols; col++)
        vtWr.Write(VT[row, col] + "\t");
    vtWr.Write("\n");
}
vtWr.Close();

どうすればメモリを管理できますか?

4

1 に答える 1

0

プロセスごとに 2Gb 以上を使用するには、アプリを x64 モードでビルドする必要があります。「C# アプリケーションでメモリ不足の例外が発生するのはなぜですか?」を参照してください。

于 2012-05-01T19:52:02.150 に答える