直接发送整个字符串和逐个字符发送有什么区别?
What is the difference between sending directly a whole string and sending character by character?
在这个code.
为什么:
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i].encode())
而且不仅仅是 :
connectionSocket.send(outputdata.encode())
我尝试了更简单的版本并且它也有效那么为什么要逐个字符地进行呢?
使用第一种方法,您实际上是将 outputdata 的内容每次迭代一个字节写入客户端套接字。
假设 outputdata 变量的实际长度为 100,会发生以下情况:
- range()函数执行一次
- len()函数执行一次
- encode()函数执行100次
- connectionSocket.send()执行100次
所以,为了仅发送 100 个字节,您有 1002 次调用...
看起来不太好。
此外,在这种特殊情况下,它是由 Python 解释器完成的,这也增加了执行这些函数调用的大量开销。
现在,使用第二种方法:
- encode()函数执行一次
- connectionSocket.send()执行一次
因此,发送 100 字节的数据只需要在您编写的代码中调用两次。
所以,一般来说,第二种方法看起来更好。
现在,对于 the code you provided,第一种和第二种方法实际上都不好,因为 outputdata 是一个变量
包含 内存中的完整文件内容!(请参阅第 16 行的 fp.read())。
因此,fp.read() 将所有内容读入进程内存,如果大小为 WILL文件超出可用内存。
encode() 函数创建一个字节数组作为编码 outputdata 的结果,有效地在同一进程内存中将其加倍
因此,实际保存两个变量所需的内存量加倍 - 从文件中读取的 outputdata 和它的编码版本,由 encode 创建并返回().
P.S。真的,(我的意思是,真的),你的 link 的代码不应该在任何类型的生产环境中使用,否则会被处以死刑:)
在这个code.
为什么:
for i in range(0, len(outputdata)):
connectionSocket.send(outputdata[i].encode())
而且不仅仅是 :
connectionSocket.send(outputdata.encode())
我尝试了更简单的版本并且它也有效那么为什么要逐个字符地进行呢?
使用第一种方法,您实际上是将 outputdata 的内容每次迭代一个字节写入客户端套接字。
假设 outputdata 变量的实际长度为 100,会发生以下情况:
- range()函数执行一次
- len()函数执行一次
- encode()函数执行100次
- connectionSocket.send()执行100次
所以,为了仅发送 100 个字节,您有 1002 次调用...
看起来不太好。
此外,在这种特殊情况下,它是由 Python 解释器完成的,这也增加了执行这些函数调用的大量开销。
现在,使用第二种方法:
- encode()函数执行一次
- connectionSocket.send()执行一次
因此,发送 100 字节的数据只需要在您编写的代码中调用两次。
所以,一般来说,第二种方法看起来更好。
现在,对于 the code you provided,第一种和第二种方法实际上都不好,因为 outputdata 是一个变量 包含 内存中的完整文件内容!(请参阅第 16 行的 fp.read())。
因此,fp.read() 将所有内容读入进程内存,如果大小为 WILL文件超出可用内存。
encode() 函数创建一个字节数组作为编码 outputdata 的结果,有效地在同一进程内存中将其加倍 因此,实际保存两个变量所需的内存量加倍 - 从文件中读取的 outputdata 和它的编码版本,由 encode 创建并返回().
P.S。真的,(我的意思是,真的),你的 link 的代码不应该在任何类型的生产环境中使用,否则会被处以死刑:)