AWS Lambda非同期コールや、AWS STEP FUNCTIONでは、payloadサイズが256KB程度に制限されています。具体的には、ソルバーに投げるpayload sizeがこのサイズを超えているとLambdaに届くまえにはじかれてしまいます。SC3GUIでは、1MBのproblem.jsonも普通にありえるので、なるべくこのサイズが、256KB以下になるようにすることが目的です。(サイズを超えたらS3を使います。DynamodbでもItemSizeが制限されているので不適です。)
SC3 GUIでは、Jsonのシリアライザにnewtonsoftを使っています。このオプションを使うことで、ある程度ダイエットが可能です。
<方法1 インテンドなしにする>#if REDUCE_JSON
Newtonsoft.Json.JsonSerializerSettings settings = new Newtonsoft.Json.JsonSerializerSettings { Converters = { new CustomDateTimeConverter() },Formatting = Newtonsoft.Json.Formatting.None };
#else
Newtonsoft.Json.JsonSerializerSettings settings = new Newtonsoft.Json.JsonSerializerSettings { Converters = { new CustomDateTimeConverter() },Formatting = Newtonsoft.Json.Formatting.Indented };//, Forma
#endif
こうすると、読みやすいJSONが
{
"SO": {
"name": "Shift Objects",
"members": [
{
"use": true,
"name": "ShiftDef",
"def_name": "日勤",
"auto_schedule": true,
"color": "LightGray",
"label": "・",
"another_labels": [
"",
""
],
読みにくくなります。これが一番効果がありました。
{"SO":{"name":"Shift Objects","members":[{"use":true,"name":"ShiftDef","def_name":"日勤","auto_schedule":true,"color":"LightGray","label":"日","another_labels":["",""],"another_colors":
<方法2 default valueを使う。defaultの値を定義しておいて、それと同じだったらJSON化されません。> 方法1と2を用いることで、サイズが1/4から1/5程度になりました。
#if REDUCE_JSON
[ DefaultValue("")]//OCT042020
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]
#endif
public string shift;
//OCT042020
#if REDUCE_JSON
[DefaultValue(0)]
[JsonProperty(DefaultValueHandling = DefaultValueHandling.Ignore)]public int level;
#endif
0 件のコメント:
コメントを投稿