所以我已经阅读过,而不是直接调用事件
if (SomeEvent != null)
SomeEvent(this, null);
Run Code Online (Sandbox Code Playgroud)
我应该这样做
SomeEventHandler temp = SomeEvent;
if (temp != null)
temp(this, null);
Run Code Online (Sandbox Code Playgroud)
为什么会这样?第二个版本如何变得线程安全?什么是最佳做法?
假设我们有一个简单的互联网套接字,它将发送随机数据的10兆字节(因为我想忽略内存问题).是否应该使用任何性能差异或最佳实践方法来接收数据?最终输出数据应由byte []表示.是的我知道向内存写入任意数量的数据是不好的,如果我下载一个大文件,我就不会这样做了.但是出于论证的缘故,让我们忽略它,并假设它是一个少量的数据.我也意识到这里的瓶颈可能不是内存管理而是套接字接收.我只是想知道什么是最有效的接收数据的方法.
一些狡猾的方式可以想到的是:
有一个List和一个缓冲区,在缓冲区已满后,将它添加到列表和结尾list.ToArray()以获取byte []
在完成构造stream.Length的byte []之后将缓冲区写入内存流,并将其全部读入其中以获取byte []输出.
有没有更有效/更好的方法来做到这一点?
例如,我正在尝试查找相应 whois 服务器的 TLD 列表
.com americanWhoisServer .net someOtherWhoisServer .au australianWhoisServer
最后,我的目标是类似字典的东西,其中键是 TLD,值是 whois 服务器地址(例如 whois.apnic.net)。
啊,天哪,我刚刚意识到我得到的是 IP 地址而不是域名,但列表仍然可以派上用场。
如何确定给定 IP 地址要使用哪个 whois 服务器?猜测并检查?