小编Vor*_*326的帖子

缓冲流如何工作?

在Java和C#中,有几个用于缓冲流的类: BufferedStream在C#Buffered(Input|Output)StreamBuffered(Reader|Writer).

他们在构造函数中获取一些流并实现相同的接口.

问题是 - 它是如何工作的?

当我试图读取一个字节时会发生什么?它将大量字节读入内部缓冲区,然后逐字节地将其返回给我?在写一个字节?写入内部缓冲区并将其flush()写入内部流?

关于读/写一个字节数组 - 在缓冲流上执行它是否效率低导致从内部数组中双重复制字节?

c# java buffer encapsulation stream

8
推荐指数
1
解决办法
2434
查看次数

TcpClient.Close()仅适用于Thread.Sleep()

我有简单的服务器从客户端获取字符串并将其打印在屏幕上.我也有简单的客户端,发送数据和关闭:

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)

c# tcp tcpclient thread-sleep

7
推荐指数
2
解决办法
4291
查看次数

内存快照触发dotMemory中的垃圾收集

我正在使用dotMemory来配置在IIS上运行的asp.net mvc应用程序.

我怀疑'获取快照'会导致GC gen2运行.为什么?这是图片:

快照导致gc 问题是:这是正常的行为吗?为什么我不能得到快照显示我所有未被GC收集的东西?每次我获得快照时:内存使用率下降.

c# asp.net garbage-collection memory-leaks memory-management

6
推荐指数
1
解决办法
1070
查看次数

目标框架如何真正起作用(为什么lib for 2.0可以使用lib for 4.0)?

我们有一个带有目标框架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上下文中执行?

.net c#

5
推荐指数
1
解决办法
165
查看次数

阻止visual studio尝试添加每个文件的"添加对typescript的支持"

我有一个包含多个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上找到帖子.但也许已经有了解决方案.或者你可以喜欢这个用户发票,如果你同意这是一个恼人的问题:)

visual-studio typescript

4
推荐指数
1
解决办法
466
查看次数

Kdiff和hg:自动合并后未解决的冲突

我们使用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的问题?

我们正在使用:

  • Windows 7 x64
  • TortoiseHg和Mercurial 3.6.1
  • Kdiff 0.9.98

来自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)

更新:

即使手动合并也会出现问题.脚步:

  • 开始变装
  • Tortoise Hg说:'有冲突' 合并失败
  • 单击"工具解析",Kdiff打开 Kdiff nuans

在这里!父1(中间列)包含'dest','source'作为文件的一部分.但是这个文件中没有这样的行.

似乎HG给kdiff文件提供了一些Kdiff不能/不可理解的差异信息.

merge mercurial tortoisehg kdiff3

2
推荐指数
1
解决办法
1025
查看次数

Guid在C#中生成bug

我在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)

.net c# guid

1
推荐指数
2
解决办法
289
查看次数

递归查找C#类的所有用法

我对该类进行了一些更改,它位于某些共享项目中,因此可以在许多网站中使用。如何确定哪些项目会受到影响?

这很有用的情况:我只想更新已更改的生产服务器,或者想了解我的更改有多有害。

当前的解决方案(使用resharper或仅使用visual studio):查找类的用法,然后查找所有用法的用法,然后查找用法的用法等。有什么方法可以使它更容易?

c# resharper visual-studio

0
推荐指数
1
解决办法
441
查看次数