将double转换为字符串时分配的内存量

本文关键字:分配 内存 字符串 double 转换 | 更新日期: 2023-09-27 18:28:13

我有数据结构,我使用数据契约将其从服务器传递到客户端。数据结构是

class datatransfer
{
    double m_value1;
    double m_value2;
    double m_value3;
};

在客户端中,我想写入文件。

  • 其思想是使用字符串生成器将数据传输的值转换为字符串而不是将字符串传输到客户端

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

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

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

双倍大小为8字节。如果我把它转换成字符串,分配的大小是多少。

将double转换为字符串时分配的内存量

这完全取决于如何格式化DoubleString表示。没有预定义的尺寸准则。

例如:

var myDouble = 5.183498029834092834D;
var shortString = myDouble.ToString("#.00"); // 5.18, uses 8 bytes
var longerString = myDouble.ToString("#.0000000"); // 5.1834980 18 bytes

请注意,这些大小是Char在我的系统上为2字节的结果

您真正想做的是称为序列化。有很多方法可以做到这一点。其中最简单的可能就是用[Serializable]属性来装饰你的类:

[Serializable]
public class datatransfer {
    double m_value1;
    double m_value2;
    double m_value3;
}

您需要将成员变量设为public,或者提供可公开访问的属性来设置成员变量。否则,它们将不会使用这种方法进行序列化。

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

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

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

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