问题描述
一直在 MVC 应用程序上字符串构建 CSV 文件,直到现在。 一个错误使我生成了一个比系统可以在内存中处理的 CSV 字符串更大的 CSV 字符串,因此我一直在网上搜索有关缩小可以在客户端重建的字符串的任何解决方案。
到目前为止,我一直在这样做:
StringBUilder sb = new StringBuilder();
foreach(stuff in manyEnumerableStuff)
sb.Append(stuff);
return csv.ToString().ToBase64();
public static string ToBase64(this string value) => Convert.ToBase64String(Encoding.Default.GetBytes(value));
在这种巨大的情况下,应用程序可以“很好”处理 .ToString()
,但它失败了,但不会在 .ToBase64String(Encoding.Default.GetBytes(value));
处创建异常
这只发生在大字符串上,因为据我所知,base64 会使字符串大 33%。
压缩的json不能解决这个问题,因为这发生在服务器端。
所以我已经开始搜索以缩小或压缩这个字符串,但它仍然需要是一个字符串并且可以在客户端的 Angular 应用程序上进行转换。
我发现了这个:
public static string compress(this string big) {
var bytes = Encoding.Default.GetBytes(big);
using (var msi = new MemoryStream(bytes))
using (var mso = new MemoryStream()) {
using (var gs = new GZipStream(mso,CompressionMode.Compress)) {
//msi.copyTo(gs);
copyTo(msi,gs);
}
return mso.ToArray().ToString();
}
}
private static void copyTo(Stream src,Stream dest) {
byte[] bytes = new byte[4096];
int cnt;
while ((cnt = src.Read(bytes,bytes.Length)) != 0) {
dest.Write(bytes,cnt);
}
}
但我认为根本没有任何意义,因为我不能在不将其转换回来的情况下将 byte[] 作为字符串放在 json 值上。
是否可以在从 StringBuilder()
获取字符串后压缩表示 .CSV 文件的普通管道分隔值?
我在将 SB 解析为字符串后立即尝试了 GC.collect()
,但仍然破坏了应用程序。
我使用的是 .Net Core 2.1,Linux 服务器。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)