双精度转换为字符串时分配的内存量

时间:2012-03-19 18:01:59

标签: c# .net serialization

我有数据结构我使用数据合同从服务器传递给客户端。 数据结构是

class datatransfer
{
    double m_value1;

    double m_value2;

    double m_value3;
};

在客户端我想写入文件。

  • 我们的想法是使用字符串构建器将数据传输的值转换为字符串 而不是将字符串传递给客户端。

  • 发送数据结构并使用流编写器
  • 编写文件

哪种方法最好?转换为字符串或发送数据结构并写入文件?

问题的原因:避免生成字符串。

double size是8个字节。如果我将它转换为字符串将分配的大小。

2 个答案:

答案 0 :(得分:2)

完全取决于您如何格式化String的{​​{1}}表示形式。没有预先定义的尺寸指南。

例如:

Double

请注意,大小是var myDouble = 5.183498029834092834D; var shortString = myDouble.ToString("#.00"); // 5.18, uses 8 bytes var longerString = myDouble.ToString("#.0000000"); // 5.1834980 18 bytes 在我的系统上为2个字节的结果。

你真正想要做的是serialization。有很多方法可以做到这一点。最简单的方法可能是使用[Serializable]属性装饰您的班级:

Char

您需要创建成员变量[Serializable] public class datatransfer { double m_value1; double m_value2; double m_value3; } ,或提供可公开访问的属性来设置成员变量。否则,他们将不会使用此方法序列化。

答案 1 :(得分:1)

转换为字符串时double的大小取决于数字本身和字符串的编码。

就像例如,假设ANSI编码,数字 1 将需要1个字节,数字 1.123 将需要5个字节。此外,如果您将其作为文本传输,则需要考虑使用更多字节作为分隔符(例如,使用空格,您将需要N - 1个额外字节)。您应该始终以二进制形式传输数据(如果可能,但可能取决于您拥有的连接类型和您必须使用的协议)。

作为一般规则,您应该认为二进制数据较小(然后传输速度更快),但调试起来并不容易,并且您可能遇到防火墙问题。文本数据更大,更详细,您必须在客户端验证它们(例如,您的结构,XML可能已损坏),然后传输速度较慢。最大的优点是它更容易调试,通常你可以传输文本的任何连接/协议(但不要忘记你可以传输编码为文本的二进制数据)。

所以这不是一个明确的答案,你正在使用什么样的数据传输方法/框架/协议?一个WCF服务? .NET Remoting?自定义TCP / IP连接?如果数据结构不是太大,您可能会发现二进制序列化是一个非常好的解决方案