c#에서 stringbuilder 가 가질 수 있는 크기에 한계가 있음?
地鬼(dczlatan)
2016-03-11 22:38
추천 0
3d 시뮬레이션을 돌리면 속도/밀도만 계산할땐 멀쩡하다가 뭐 좀 보고 싶어서 하나 하나 추가하다보면
멀쩡한 프로그램이 에러나면서 꺼짐
데이터 저장하는 메소드는 이런 식
public void saveFiles()
{
StringBuilder post = new StringBuilder();
post.Append("# vtk DataFile Version 3.0");
post.AppendLine();
post.Append("fluid_state");
post.AppendLine();
post.Append("ASCII");
post.AppendLine();
post.Append("DATASET STRUCTURED_POINTS");
post.AppendLine();
post.Append("DIMENSIONS " + data.size[0].ToString() + " " + data.size[1].ToString() + " 1");
post.AppendLine();
post.Append("ORIGIN 0 0 0");
post.AppendLine();
post.Append("SPACING 1 1 1");
post.AppendLine();
post.Append("POINT_DATA " + (data.size[0] * data.size[1]).ToString());
post.AppendLine();
post.Append("SCALARS density double 1");
post.AppendLine();
post.Append("LOOKUP_TABLE default");
post.AppendLine();
for (int index = 0; index < data.size[0] * data.size[1]; index++)
{
post.Append(data.density[index].ToString());
post.AppendLine();
}
post.Append("VECTORS velocity_vector double");
post.AppendLine();
for (int index = 0; index < data.size[0] * data.size[1]; index++)
{
post.Append(data.ux[index].ToString() + " " + data.uy[index].ToString() + " 0");
post.AppendLine();
}
name = nameFiles("vtk");
System.IO.File.WriteAllText(name, post.ToString());
}
코드 ㄱㄱ
22메가 밖에 안되는데
속도/농도장만 했을때
코드 보여줘용ㅋㅋ
저기서 data.ux[], data.uy[], data.density[] 는 100*200*50 크기의 double 배열
2d로 할땐 문제가 없는데 3d에 몇가지 더 보고 싶어서 strain, phi 이런거 하나씩 추가하다보면 프로그램이 뒤짐 ㅠ.ㅠ
중단점 걸고 디버깅 찍어보셈
데이터.사이즈0이랑 1은 몇개씩임?
201 * 200 인데 2d땐 문제 없음
전체코드를 올려봐 저것만봐서는 루프식에 이상이없는거아니면 문제없다
흠; 전체 식은 안에 배열 안에 들어갈 값을 계산하는 부분이고... 대단한건 아니지만 아직 출판을 안한거라 공개하기가 그럼;
님 말로 봐선 c#의 stringbuilder에 별다른 용량 제한 같은게 없다고 이해하면 됨?
네 그렇죠. 어디지점에서 뻑나는지는 찾으셨어요?
내 기억으론 for 루프 안에서 append 하는 라인에서 뒤졌음. 그래서 stringbuilder 용량 물어본 것.. 자세한건 실험실 컴퓨터에서 확인해야됨 ㅠ.ㅠ
지금 루프를 40200번도니까 용량체크하려면 저기에 실제데이터넣지말고 직접 더블에 아무값이나 비슷하게 소숫점 맞춰서 선언하고 그걸로 돌려봐 그게 정상작동하면 데이터가 깨지거나 루프의 index변수랑 data랑 매칭안될 가능성 99퍼
위 루프는 2d 케이스라서 에러 나는게 없었는데 3d 때 문제가 있었음