小编sho*_*der的帖子

如何在Linux上转储.NET核心应用程序

我有一个.NET应用程序,我已移植到.NET Core.我在Ubuntu 14.04上测试它.

我试图弄清楚如何在程序崩溃时获取.dmp文件或Linux等效文件.我打电话,Environment.FailFast但据我所知,这不会像在Windows上那样生成.dmp文件.根据这种情况 Environment.FailFast应该创建一个转储,但如果它是我找不到它.

另外我尝试使用手动创建转储gcore.这可行但是生成转储需要很长时间(我的应用程序不是那么大)并且我无法在gdb之后获得正确的callstacks,因为当我将gdb指向我的应用程序时它无法识别它.

在Linux上获取.NET Core应用程序转储的最佳方法是什么?

谢谢!

.net linux dump .net-core

23
推荐指数
2
解决办法
4306
查看次数

如果没有IO线程来处理异步结果会发生什么?

我想知道当没有IO线程来处理异步调用的结果时会发生什么.

假设您发出异步Web请求(在服务器应用程序中,因此所有异步代码都由线程池管理).OS会在有结果时发出信号,当它出现时,你需要一个IO线程来读取套接字中的字节.如果没有可用的IO线程,因为它们都在使用中(所有意味着最多由线程池设置的最大值)会发生什么?是否有一个队列,信号可以等到有线程可用?或者信号是否闻所未闻?如果后者发生,等待等待的代码会发生什么?

c# async-await

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

写入具有多个流的文件C#

我试图使用HTTP从一台服务器下载一个大文件(> 1GB).为此,我将并行处理HTTP范围请求.这让我可以并行下载文件.

保存到磁盘时,我正在接收每个响应流,打开文件流相同的文件,寻找我想要的范围然后写入.

但是我发现除了我的一个响应流之外的所有响应都会超时.它看起来像磁盘I/O无法与网络I/O跟上.但是,如果我做同样的事情,但让每个线程写入一个单独的文件,它工作正常.

作为参考,这是我写入同一文件的代码:

int numberOfStreams = 4;
List<Tuple<int, int>> ranges = new List<Tuple<int, int>>();
string fileName = @"C:\MyCoolFile.txt";
//List populated here
Parallel.For(0, numberOfStreams, (index, state) =>
{
    try
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("Some URL");
        using(Stream responseStream = webRequest.GetResponse().GetResponseStream())
        {
            using (FileStream fileStream = File.Open(fileName, FileMode.OpenOrCreate, FileAccess.Write, FileShare.Write))
            {
                fileStream.Seek(ranges[index].Item1, SeekOrigin.Begin);
                byte[] buffer = new byte[64 * 1024];
                int bytesRead;
                while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0)
                {
                    if (state.IsStopped)
                    {
                        return; …
Run Code Online (Sandbox Code Playgroud)

c# io multithreading file parallel.for

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

如何解决Gen2堆碎片

我正在运行一个服务HTTP请求的C#应用​​程序。我最近注意到,它占用的内存比我预期的要多。我抓起一些转储,将它们弹出到Windbg中,发现大部分内存都标记为“空闲”:

!dumpheap -stat
...
00007ffde4783630   681599     65433504 System.Threading.Tasks.TaskFactory+CompleteOnInvokePromise
00007ffde47cc988   167885     76872908 System.Byte[]
00007ffde47c6948   521353     80352802 System.String
0000007e3a16c2d0  1870425   1415374334      Free
Run Code Online (Sandbox Code Playgroud)

因此,转储约为3GB,因此其中约有一半是可用内存。看着堆,我看到了:

!heapstat
Heap             Gen0         Gen1         Gen2          LOH
Heap0        82248472      7354560    987275056    178834656
Heap1        93146552      6382864    857470096    129435960
Total       175395024     13737424   1844745152    308270616

Free space:                                                 Percentage
Heap0        40969256       146456    640426720     54829792 SOH: 63% LOH: 30%
Heap1        75943736        94448    550812312     54825216 SOH: 65% LOH: 42%
Total       116912992       240904   1191239032    109655008
Run Code Online (Sandbox Code Playgroud)

因此,我的小对象堆非常分散,特别是Gen2。在服务器上,我可以看到gen2集合正在发生(使用性能计数器),但是即使它们是gen2堆,也似乎没有对其进行压缩。即使服务器上只有1-2%的RAM可用,gen2堆也不会被压缩。

在我看来,由于堆是零散的,所以我正遭受这种内存压力。但是我无法弄清楚为什么会发生碎片或为什么gen2无法压缩。一些可用空间的大小为6MB,所以我认为肯定可以将那些空间压缩掉。

谁能给我一些关于如何弄清楚我的堆为什么如此分散的想法?我什至在这里吠叫正确的树吗?

任何帮助将不胜感激,谢谢!

编辑1:

的细分!gchandles为:

Handles:
Strong Handles:       4507 …
Run Code Online (Sandbox Code Playgroud)

.net c# garbage-collection heap-fragmentation memory-fragmentation

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

在.JAR文件中打开HTML文件

我有一个名为snake.html的html文件,我想把它放在一个罐子里.运行jar时,主类应该在浏览器中打开这个html文件.我试过了:

public static void main(String[] args) throws IOException, URISyntaxException {
    URL url = Snake.class.getResource("/WebContent/snake.html");
    System.out.println(url);
    // relative to the class location
    Desktop.getDesktop().browse(url.toURI());
}
Run Code Online (Sandbox Code Playgroud)

如果我只是运行这段代码但是当我把它(和html文件)运行时,我会得到以下异常:

Exception in thread "main" java.io.IOException: Failed to mail or browse
       jar:file:/Users/~user~/Desktop/Snake%20v0.1.jar!/WebContent/snake.html. 
       Error code: -10814
at apple.awt.CDesktopPeer.lsOpen(CDesktopPeer.java:52)
at apple.awt.CDesktopPeer.browse(CDesktopPeer.java:45)
at java.awt.Desktop.browse(Desktop.java:368)
at snake.Snake.main(Snake.java:26)
Run Code Online (Sandbox Code Playgroud)

我想知道我是否有类路径问题或者我没有正确地将jar指向文件.这个jar有两个目录,snake和WebContent.Snake有snake.class文件,WebContent有snake.html.

任何和所有帮助/批评赞赏.

html java jar executable-jar

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