評価
良い / 悪い = 32 / 3 (「良い」の割合 = 0.914 , 人気度 = 1.411 )
評価する
- 人を不快にさせる内容の投稿は絶対にしないでください。悪質な投稿者には、予告なく罰則(閲覧禁止やIP公開等)を科します。
- この記事だけでない、全般的なご提案は「DOBON.NETへの提案」に、ご意見は「お気楽掲示板」に投稿してください。
- 5文字以上、1000文字以下のコメントしか投稿できません。
- HTMLタグは使用できません。
Copyright(C) DOBON!. All rights reserved.
m 2022/02/9 (Wed) 14:33:42
mXParserでは大量のレコードでメモリリークのような現象が発生しました。
DataTableで10万レコードの計算処理をしたところ2秒かからなかったため、かなり優秀でした。
DataTableで計算する場合、式文字列は不正だと例外が発生するので、とりあえずtry catch内で実施しました。
ただし、式文字列は不正なものを渡さないようにする必要はあります。
また、Computeの結果はobjectで受け、数字にするにはdecimal.TryParseをして変換する必要があります。
式とそのパラメータは動的な場合が多いですが、それは自力で置換する必要があります。
---
decimal[] array = new decimal[100000];
DataTable dataTable = new DataTable();
object? result = null;
for (int k = 0; k < 100000; k++) {
result = null;
decimal value = 0;
// 式文字列
string expressionString = (k + 1).ToString() + "+1.1";
// dataTable.Computeのみtry catchで実施
try {
result = dataTable.Compute(expressionString, "");
} catch (Exception e) {
Console.WriteLine(e);
}
if (result != null) {
decimal.TryParse(result.ToString(), out value);
}
array[k] = value;
}
---