相关疑难解决方法(0)

什么是一些好的.NET Profilers?

您在使用.net程序时使用了哪些分析器,您会特别推荐哪些?

.net c# profiler profiling

374
推荐指数
12
解决办法
31万
查看次数

.NET代码分析工具

有没有人对代码分析有任何好的建议?我希望能够查看系统堆,内存使用情况,垃圾收集状态等...

.net profiling

15
推荐指数
4
解决办法
6377
查看次数

.NET OutOfMemoryException

为什么这样:

class OutOfMemoryTest02
{
    static void Main()
    {
        string value = new string('a', int.MaxValue);
    }
}
Run Code Online (Sandbox Code Playgroud)

抛出异常; 但这不会:

class OutOfMemoryTest
{
    private static void Main()
    {
        Int64 i = 0;
        ArrayList l = new ArrayList();
        while (true)
        {
            l.Add(new String('c', 1024));

            i++;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么不同?

.net c# out-of-memory

12
推荐指数
3
解决办法
2399
查看次数

如何在.NET应用程序中探索托管堆以识别可能的内存优化?

我们有一个.NET应用程序,我们的客户认为它太大而无法进行大规模部署,我们希望了解是什么有助于我们的内存占用,并且可以在不完全放弃.NET和wpf的情况下做得更好.

我们有兴趣改进总大小和私人工作集(pws).在这个问题中我只想看看pws.VMMap通常会报告105 MB的pws.其中11mb是图像,31mb是堆,52mb是托管堆,7mb是私有数据,其余是堆栈,页表等.

这里最大的奖项是托管堆.我们可以直接在我们自己的代码中占用大约8mb的manged堆,即我们创建和管理的对象和窗口.其余的是由我们使用的框架元素创建的可能的.NET对象.

我们想要做的是确定框架帐户的哪个元素占这个用途的哪个部分,并且可能重新构建我们的系统以避免在可能的情况下使用它们.任何人都可以建议如何进行这项调查?

进一步澄清:

到目前为止,我已经使用了许多工具,包括优秀的ANTS分析器和带有SOS的WinDbg,它们允许我看到托管堆中的对象,但真正感兴趣的不是"什么?",而是"为什么? " 理想情况下,我希望能够说,"好吧,因为我们使用WCF,所以在这里创建了10mb的对象.如果我们编写自己的本地传输,我们可以节省8mb的x质量风险和开发工作."

不可能在300,000多个对象上执行gcroot.

.net heap optimization managed

10
推荐指数
1
解决办法
6249
查看次数

如何在没有临时文件的情况下将流从Web API传递到Azure Blob存储?

我正在开发一个文件上传经常发生的应用程序,并且可能非常大.

这些文件正在上传到Web API,然后Web API将从请求中获取流,并将其传递给我的存储服务,然后将其上载到Azure Blob存储.

我需要确保:

  • 没有温度.文件写在Web API实例上
  • 在将请求流传递给存储服务之前,请求流未完全读入内存(以防止内存不足异常).

我看过这篇文章,它描述了如何禁用输入流缓冲,但是许多不同用户的文件上传同时发生,重要的是它实际上完成了它在锡上所说的内容.

这就是我目前控制器中的内容:

if (this.Request.Content.IsMimeMultipartContent())
{
    var provider = new MultipartMemoryStreamProvider();
    await this.Request.Content.ReadAsMultipartAsync(provider);
    var fileContent = provider.Contents.SingleOrDefault();

    if (fileContent == null)
    {
        throw new ArgumentException("No filename.");
    }

    var fileName = fileContent.Headers.ContentDisposition.FileName.Replace("\"", string.Empty);

    // I need to make sure this stream is ready to be processed by 
    // the Azure client lib, but not buffered fully, to prevent OoM.
    var stream = await fileContent.ReadAsStreamAsync();
}
Run Code Online (Sandbox Code Playgroud)

我不知道如何可靠地测试这个.

编辑:我忘了提到直接上传到Blob存储(绕过我的API)将无法正常工作,因为我正在进行一些大小检查(例如,这个用户可以上传500mb吗?这个用户是否使用了他的配额?).

c# asp.net azure azure-storage asp.net-web-api

9
推荐指数
2
解决办法
2848
查看次数

发现.NET内存泄漏?

我创建了一个带有2个Dialogs的示例程序.两个对话框都有一个图片框,一个调用pictureBox1.Image.Dispose(); 在受保护的覆盖void Dispose(bool disposing)方法中,另一方法没有.

当您运行该程序并使用任务管理器查看内存使用情况时,明显,该对话框不会调用pictureBox1.Image.Dispose(); 泄密记忆非常糟糕.

是否有人建议使用能够以如此清晰的方式显示问题的工具?

有没有办法计算特定c#源文件的内存分配/释放?至少这是我能够用非托管C++做的事情.

.net c# memory-leaks

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

clr的原因!JIT_New在PerfView CPU堆栈中

我使用PerfView调整应用程序,第二个最昂贵的项目目前标记为:

其他<< clr!JIT_New >>

占CPU的10%以上.即使对于后续运行的测试用例,这仍然存在.

任何人都可以确定哪些活动或代码实践可能导致动态生成需要JIT-ting的新代码?

.net c# performance perfview

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

计时器与While循环-内存使用情况

我正在用C#编写一种游戏,我想知道什么是更好的内存使用方法。现在我有了它,因此它经历了一个while循环,并且在游戏运行时它将检查某些事情(此人已死等),睡一秒钟,然后重试。游戏结束后,将while设置为false并退出该方法。计时器会是更好的方法吗?有时在运行此游戏时会注意到内存问题。

c# memory timer while-loop thread-sleep

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

Console.WriteLine 和内存泄漏

我正在尝试减少我拥有的控制台应用程序的内存使用量。它应该连续运行几个小时,但似乎内存使用量每秒都在逐渐增加。它确实使用多个线程,并执行各种操作,但我在某处读到,大量调用 Console.WriteLine 也会导致内存峰值。

因为应用程序不断地写入控制台,我想内存使用可能就是因为这个。不幸的是,我无法轻松清除控制台,因为我将输出重定向到监视窗口。我暂时关闭了它,但内存仍在增加,这告诉我还有其他事情需要解决。

在我开始寻找内存泄漏之前,我想知道是否有人可以确认/验证拥有数千个 Console.WriteLine 是否会导致内存泄漏,或者重定向的输出缓冲区是否已经正确处理了内存泄漏。我尝试进行搜索,但没有找到太多相关信息。

c# console memory-leaks console.writeline

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

图像的 WPF 内存问题

我似乎遇到了一些大的内存消耗问题。当我第一次加载包含 gridview 和 observablecollection 的 wpf 应用程序时,该应用程序大约为 10mb。

当我单击 gridview 中的一个项目时,它会打开另一个窗口,其中包含一个图像控件,该控件传递一个 base64 字符串,然后我将其转换为 BitmapImage

然后应用程序从 10mb 跳到大约 123mb。原始图像大小为 64k,但我所有存储的图像都是 base64 字符串,我将其转换回 byte[] 然后转换为 BitmapImage。是的,我的意思是这样做。

当我关闭窗口时,没有一个 ram 被释放。我什至尝试过调用 GC。

我使用下面的代码将base64图像变成

var bitmapImage = new BitmapImage();
bitmapImage.BeginInit();
bitmapImage.CacheOption = BitmapCacheOption.None;
bitmapImage.StreamSource = new SIO.MemoryStream(imageBytes);
bitmapImage.EndInit();
return bitmapImage;
Run Code Online (Sandbox Code Playgroud)

然后被分配给 Image.Source

c# wpf

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

是否可以知道Visual Studio 2013中加载了多少个类型的对象

我想知道在调试时是否可以知道使用Visual Studio 2013加载了多少个类型的对象.我目前正在使用C#进行开发.

c# memory-profiling visual-studio visual-studio-2013

3
推荐指数
1
解决办法
1146
查看次数

进行进程内存转储,稍后在.NET中进行恢复

我正在寻找一种方法来增加.NET应用程序的启动时间.

想法是在启动初始化后立即进行进程内存转储并将其存储在磁盘上.在第二次运行时,用转储和加速应用程序启动替换进程内存会很不错.

所以,我的问题:

  1. 有没有办法转储.NET进程内存?
  2. 有没有办法从该转储恢复进程内存状态?
  3. 解决方案(如果存在)是否适用于IIS托管的ASP.NET应用程序?

谢谢.

.net clr performance memory-management unsafe

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

以字节为单位获取C#列表的大小

我在visual studio 2010下有一个Windows应用程序c#

我创建具有名称的类book与3个字段(name,writingDate,author)

我创建另一个名为()book列表的类bookList<book>

当我检索books类数据时,我需要知道它的字节大小

我怎样才能做到这一点?

注意:我尝试Marshal.SizeOf(books)但发生此错误

"Type 'System.Collections.Generic.List`1[books]' cannot be marshaled as 
an unmanaged structure; no meaningful size or offset can be computed."
Run Code Online (Sandbox Code Playgroud)

任何帮助?

c# byte list visual-studio-2010

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