From 339e4c2588286d49033484fad6e08b36acbe6d43 Mon Sep 17 00:00:00 2001 From: Kimura Youichi Date: Wed, 1 Jun 2016 09:54:59 +0900 Subject: [PATCH] =?utf8?q?PostClass=E5=86=85=E3=81=AE=E9=87=8D=E8=A4=87?= =?utf8?q?=E3=81=99=E3=82=8B=E6=96=87=E5=AD=97=E5=88=97=E3=81=8C=E5=90=8C?= =?utf8?q?=E4=B8=80=E3=81=AEstring=E3=82=A4=E3=83=B3=E3=82=B9=E3=82=BF?= =?utf8?q?=E3=83=B3=E3=82=B9=E3=82=92=E6=8C=87=E3=81=99=E3=82=88=E3=81=86?= =?utf8?q?=E3=81=AB=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- OpenTween/Twitter.cs | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/OpenTween/Twitter.cs b/OpenTween/Twitter.cs index 4f19d03d..4d3026f1 100644 --- a/OpenTween/Twitter.cs +++ b/OpenTween/Twitter.cs @@ -763,6 +763,18 @@ namespace OpenTween post.AccessibleText = WebUtility.HtmlDecode(post.AccessibleText); post.AccessibleText = post.AccessibleText.Replace("<3", "\u2661"); + // メモリ使用量削減 (同一のテキストであれば同一の string インスタンスを参照させる) + if (post.Text == post.TextFromApi) + post.Text = post.TextFromApi; + if (post.AccessibleText == post.TextFromApi) + post.AccessibleText = post.TextFromApi; + + // 他の発言と重複しやすい (共通化できる) 文字列は string.Intern を通す + post.ScreenName = string.Intern(post.ScreenName); + post.Nickname = string.Intern(post.Nickname); + post.ImageUrl = string.Intern(post.ImageUrl); + post.RetweetedBy = post.RetweetedBy != null ? string.Intern(post.RetweetedBy) : null; + post.QuoteStatusIds = GetQuoteTweetStatusIds(entities) .Where(x => x != post.StatusId && x != post.RetweetedId) .Distinct().ToArray(); @@ -773,7 +785,7 @@ namespace OpenTween //Source整形 var source = ParseSource(sourceHtml); - post.Source = source.Item1; + post.Source = string.Intern(source.Item1); post.SourceUri = source.Item2; post.IsReply = post.ReplyToList.Contains(_uname); @@ -1125,6 +1137,12 @@ namespace OpenTween post.AccessibleText = post.AccessibleText.Replace("<3", "\u2661"); post.IsFav = false; + // メモリ使用量削減 (同一のテキストであれば同一の string インスタンスを参照させる) + if (post.Text == post.TextFromApi) + post.Text = post.TextFromApi; + if (post.AccessibleText == post.TextFromApi) + post.AccessibleText = post.TextFromApi; + post.QuoteStatusIds = GetQuoteTweetStatusIds(message.Entities).Distinct().ToArray(); post.ExpandedUrls = message.Entities.OfType() @@ -1169,6 +1187,11 @@ namespace OpenTween post.Nickname = user.Name.Trim(); post.ImageUrl = user.ProfileImageUrlHttps; post.IsProtect = user.Protected; + + // 他の発言と重複しやすい (共通化できる) 文字列は string.Intern を通す + post.ScreenName = string.Intern(post.ScreenName); + post.Nickname = string.Intern(post.Nickname); + post.ImageUrl = string.Intern(post.ImageUrl); } catch(Exception ex) { -- 2.11.0