在Java和C#中,有几个用于缓冲流的类:
BufferedStream在C#Buffered(Input|Output)Stream 和Buffered(Reader|Writer).
他们在构造函数中获取一些流并实现相同的接口.
问题是 - 它是如何工作的?
当我试图读取一个字节时会发生什么?它将大量字节读入内部缓冲区,然后逐字节地将其返回给我?在写一个字节?写入内部缓冲区并将其flush()写入内部流?
关于读/写一个字节数组 - 在缓冲流上执行它是否效率低导致从内部数组中双重复制字节?
我有简单的服务器从客户端获取字符串并将其打印在屏幕上.我也有简单的客户端,发送数据和关闭:
static void Main()
{
var client = new TcpClient("localhost", 26140);
var stream = client.GetStream();
Byte[] data = System.Text.Encoding.UTF8.GetBytes("CALC qwer");
stream.Write(data, 0, data.Length);
stream.Close();
client.Close();
//Thread.Sleep(100);
}
Run Code Online (Sandbox Code Playgroud)
并且使用未注释的字符串'Thread.Sleep(100)'它可以正常工作.但是在评论时,有时候(5-10次运行中的1次)客户端不会发送字符串.看着wireshark和netstat我注意到客户端发送SYN,ACK包,建立连接并退出而不发送任何内容而不关闭套接字.
任何人都可以解释这种行为吗?睡眠有帮助吗?我究竟做错了什么?
UPD:
有了这个示例代码,在关闭之前添加flush()确实有效,感谢Fox32.
但在它之后我回到了我的初始代码:
var client = new TcpClient("localhost", 26140);
client.NoDelay = true;
var stream = client.GetStream();
var writer = new StreamWriter(stream);
writer.WriteLine("CALC qwer");
writer.Flush();
stream.Flush();
stream.Close();
client.Close();
Run Code Online (Sandbox Code Playgroud)
即使使用NoDelay,它也无法正常工作.这很糟糕 - 在网络流上使用StreamWriter?
UPD:
这是服务器代码:
static void Main(string[] args)
{
(new Server(26140)).Run();
}
Run Code Online (Sandbox Code Playgroud)
在Server类中:
public void Run()
{
var listener = new TcpListener(IPAddress.Any, port); …Run Code Online (Sandbox Code Playgroud) 我正在使用dotMemory来配置在IIS上运行的asp.net mvc应用程序.
我怀疑'获取快照'会导致GC gen2运行.为什么?这是图片:
c# asp.net garbage-collection memory-leaks memory-management
我们有一个带有目标框架4.5.1的Web ASP.NET应用程序,它引用了一些用target framework 2.0构建的库.所以,4.5.1可以使用2.0,没关系.
但是当app使用package for 2.0 framework时,app和library都使用log4net 1.2.11和app使用package for 4.0 framework.
在这里看起来如何:
Application [4.5.1] --> Library [2.0]
| |
V V
log4net [4.0] log4net [2.0]
Run Code Online (Sandbox Code Playgroud)
当我构建应用程序时,在bin文件夹中我有:app.dll,library.dll和log4net.dll.而log4net这里是针对4.0框架构建的.所以问题是:在这种情况下,library.dll(内置目标2.0)如何使用log4net(内置目标4.0)?是因为运行时是4.5.1而目标框架没有任何意义,所有代码都在4.5.1上下文中执行?
我有一个包含多个Web项目的解决方案.并且存在tsconfig用于在解决方案中构建所有打字稿的共同点.构建是通过webpack,所以我不希望Visual Studio提供任何打字稿.更准确地说,我需要一些支持 - 在导航和重构中,但我不希望VS构建此代码.
所以我删除了所有对typescript目标的引用csproj,一切正常.但是每当我添加一个新的打字稿文件时,VS都乐于说
您的项目已配置为支持TypeScript
并将所有打字稿目标返回给csproj.
我可以阻止VS这样做吗?当然我可以忍受它,但每次添加后从csproj中删除垃圾似乎不舒服.
UPD:在VS https://visualstudio.uservoice.com/forums/121579-visual-studio-ide/suggestions/13420095-ask-to-configure-projects-for-typescript的 uservoice上找到帖子.但也许已经有了解决方案.或者你可以喜欢这个用户发票,如果你同意这是一个恼人的问题:)
我们使用Mercurial(+ Tortoise Hg)作为VCS,使用Kdiff作为差异和合并工具.
有些文件会自动合并,有时这个自动合并结果很奇怪:
public static Method()
<<<<<<< local
{
DoSmth();
}
=======
{
DoSmth2();
}
>>>>>>> other
Run Code Online (Sandbox Code Playgroud)
似乎kdiff对文件中未解决的冲突没有做任何事情,但将其标记为已解决.也许kdiff有时不理解diff文件格式?hg和kdiff集成中的一些错误?
也似乎最近出现了这个问题,可能是新版本的hg/tortoise hg/kdiff的问题?
我们正在使用:
来自mercurial.ini:
[ui]
merge = kdiff3
[tortoisehg]
editor=VisualStudio
vdiff=meld
[merge-tools]
meld.executable = C:\Program Files (x86)\Meld\meld.exe
meld.priority = 1
meld.premerge = False
meld.args = $local $base $other
[diff]
git = True
Run Code Online (Sandbox Code Playgroud)
即使手动合并也会出现问题.脚步:
在这里!父1(中间列)包含'dest','source'作为文件的一部分.但是这个文件中没有这样的行.
似乎HG给kdiff文件提供了一些Kdiff不能/不可理解的差异信息.
我在C#,.NET 4.0中使用Guid.NewGuid().而且我发现了一个有趣的事实:我生成的每个Guid在13位都有'4'.
da1471ac-11f7- 4 fb7-a7fa-927fffe8a97c
c90058aa-5d7f- 4 bb5-b3a9-c1db197cf3b1
fa68ec75-8cd2- 4 c24-92f8-41dbbdd428a0
d4efd455-e892- 4 3ef-b7bf-9462c5dc4de4
e0a001a0-8969- 4 092-b7a2-e410ed2b351a
30ae98b9-48ae- 4 25d-b6e7-e091502d6ce2
6a95de82-67ff- 4 4c9-9f7b-e37a80462cf7
66768e46-6d60- 4 2b4-b473-2f6f8bc1559a
Run Code Online (Sandbox Code Playgroud)
我在几台机器上试过它并得到了相同的结果.任何人都可以尝试或解释它吗?
简单的检查代码:
static void Main(string[] args)
{
bool ok = false;
for (int i = 0; i < 10000; i++)
{
var guid = Guid.NewGuid();
if (guid.ToString()[14] != '4')
ok = true;
Console.WriteLine(guid);
}
Console.WriteLine(ok ? "No bug!" : "4bug founded!");
}
Run Code Online (Sandbox Code Playgroud) 我对该类进行了一些更改,它位于某些共享项目中,因此可以在许多网站中使用。如何确定哪些项目会受到影响?
这很有用的情况:我只想更新已更改的生产服务器,或者想了解我的更改有多有害。
当前的解决方案(使用resharper或仅使用visual studio):查找类的用法,然后查找所有用法的用法,然后查找用法的用法等。有什么方法可以使它更容易?
c# ×6
.net ×2
asp.net ×1
buffer ×1
guid ×1
java ×1
kdiff3 ×1
memory-leaks ×1
mercurial ×1
merge ×1
resharper ×1
stream ×1
tcp ×1
tcpclient ×1
thread-sleep ×1
tortoisehg ×1
typescript ×1