小编Joh*_*020的帖子

c#linq - 从数组中获取不存在于不同数组中的元素

我有两个数组idxListResponse&_index,它们都具有相同的结构.

这些数组中的每一个都包含许多具有不同属性的元素,其中一个元素是一个名为indexdata的子数组

此数组的每个元素都有许多属性,其中一个属性是另一个名为datafield的数组.这具有许多键值对属性.

所以本质上我有3个独立数组的层次结构.

我希望获得层次结构的第一级+第3级项目不匹配的第二级别的所有元素,即仅排除第3级项目匹配的第2级别的项目.

我尝试过多种不同的方法,但到目前为止,我没有得到任何帮助.

仅供参考 - 这是我的最新尝试

var q = idxListResponse.Index.Where(a =>
    a.IndexData.All(b =>
        b.DataField.All(c =>
            _index.Index.Where(z =>
                z.IndexData.All(y => y.DataField.Contains(c.name))
            )
        )
    )
);
Run Code Online (Sandbox Code Playgroud)

c# linq

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

GC生成3出现在windbg中

我有一个正在运行的进程的转储文件(试图找到内存泄漏)

我注意到的一件事是,当我通过大量物体转储时!windbg告诉我它们是GC第3代?

所有这些都是字节数组,所以当我查看转储中的所有字节数组时,我可以看到GC生成0,1,2和3.

有人可以解释这里发生的事情,因为我认为只有3代GC.

> 0:000> !do 0x0000000011b47450 
Name: System.Byte[]
MethodTable: 000007fef7d2e798
EEClass: 000007fef7932670
Size: 131096(0x20018) bytes
GC Generation: 3
Array: Rank 1, Number of elements 131072, Type Byte
Element Type: System.Byte
Fields:
None
Run Code Online (Sandbox Code Playgroud)

.net c# clr

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

readerwriterlock允许读取写入锁定获取?

我有一个静态类,可以通过多个远程访问和应用程序线程的其他内部访问.该类的部分功能是控制对各种文件的读/写访问,因此我在文件列表上实现了静态ReaderWriterLock.该项目使用.net framework 2.0作为客户需求的一部分.

然而,当我使用许多不同的客户端(通常我使用16个)对系统进行压力测试时,每个客户端都执行大量的读写操作,然后非常间歇性地执行,并且仅在几小时甚至几天之后才完成至少500k +交易完成了系统崩溃.好的,我们有一个bug ..

但是当我检查所有锁定事件的日志时,我可以看到发生了以下情况:

1:线程A直接获取写锁,检查IsWriterLock是否为真.

2:即使线程A仍然具有写锁定,线程B 也会尝试获取读取器锁定并成功

3:系统现在崩溃,堆栈跟踪现在显示readerwriterlock的空引用异常

此过程之前已运行了数十万次,没有任何错误,我可以检查日志,看到读取锁在之前的所有情况下都被阻止,直到写入退出.我也尝试将readerwriterlock实现为单例,但问题仍然存在

有没有人见过这样的事情?

使用的readerwriterlock实现的简化版本如下所示:

private const int readwriterlocktimeoutms = 5000;
    private static ReaderWriterLock readerWriterLock = new ReaderWriterLock();


    // this method will be called by thread A
    public static void MethodA()
    {
        // bool to indicate that we have the lock
        bool IsTaken = false;

        try
        {                
            // get the lock
            readerWriterLock.AcquireWriterLock(readwriterlocktimeoutms);

            // log that we have the lock for debug
            // Logger.LogInfo("MethodA: acquired write lock; writer lock held {0}; …
Run Code Online (Sandbox Code Playgroud)

c# multithreading

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

c#获取系统文件缓存大小

我正在尝试获取当前系统文件缓存大小,如下所示.但是,当我运行此代码时,没有任何内容返回,有人可以看到我出错的地方吗?仅供参考,链接是GetSystemFileCache.

    [DllImport("kernel32", SetLastError = true, CharSet = CharSet.Unicode)]
    public static extern bool GetSystemFileCacheSize(
        ref IntPtr lpMinimumFileCacheSize,
        ref IntPtr lpMaximumFileCacheSize,
        ref IntPtr lpFlags
        );

    static void Main(string[] args)
    {            
        IntPtr lpMinimumFileCacheSize = IntPtr.Zero;
        IntPtr lpMaximumFileCacheSize = IntPtr.Zero;
        IntPtr lpFlags = IntPtr.Zero;

        bool b = GetSystemFileCacheSize(ref lpMinimumFileCacheSize, ref lpMaximumFileCacheSize, ref lpFlags);
    }
Run Code Online (Sandbox Code Playgroud)

c# pinvoke

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

Windbg期望mscordacwks.dll的不同版本

我在尝试使用windbg调试minidump文件时遇到了一个非常奇怪的问题.我已经在我自己的机器上尝试过这种方法,并且在目标机器上运行windbg,从中获取minidump,但结果在两种情况下都是相同的.

在开始时我加载所需的dll,如下所示,请注意,如果我将症状设置为微软符号服务器,则会出现同样的问题.

0:000> .symfix c:\ sos

0:000> .load C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\sos

检查链条的一切看起来都不错,所以我现在去运行!pe并得到一个关于mscordacwks的错误,据我所知,这通常表明我使用的是.net框架的错误版本.但是在我在目标机器上运行它时,情况确实应该不是这样.

然后我做了一个冗长的加载

.cordll -ve -u -l

并获取以下错误消息

CLRDLL:C:\ Windows\Microsoft.NET\Framework\v4.0.30319\mscordacwks.dll:4.0.30319.17929 f:8与所需版本4.0.30319.296不匹配f:8

我不明白为什么windbg正在寻找旧版本的mscordacwks?似乎.296版本是从ms符号服务器下载的clr的版本,但我明确地告诉windbg使用本地版本.

我尝试了这里这里建议的方法,但没有任何作用.任何帮助是极大的赞赏.

.net debugging windbg

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

在页面加载之前运行ASP.Net LoadComplete事件?

我需要计算加载页面时UTC时间的当前偏移量.我可以通过javascript函数调用非常简单地将其作为页面的body onload事件的一部分,如下所示:

<script type="text/javascript" language="javascript">

    function getOffset() {
        var curUTCDate = new Date();
        var iMins = curUTCDate.getTimezoneOffset();
        return iMins;
    }
</script>

<body id="bodymain" onload="javascript:document.forms[0]['hdnOffset'].value=getOffset();">
<form id="form1" runat="server">

    <input id="hdnOffset" runat="server"/>
    <asp:Label ID="lblText" runat="server"></asp:Label> 
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试在服务器端的Page_LoadComplete的一部分后面的代码中使用此值时,偏移值尚未设置,如下所示

protected void Page_LoadComplete(object sender, EventArgs e)
    {
        if (!String.IsNullOrEmpty(hdnOffset.Value))
        {
            lblText.Text = hdnOffset.Value + " value set";
        }
        else
        {
            lblText.Text = " value not set ";
        }
    }
Run Code Online (Sandbox Code Playgroud)

但是,一旦页面完全呈现,偏移确实可用,因为它的值现在显示在输入框中.所以对我来说,这看起来好像作为body onload事件的一部分调用的javascript只在Page完全加载后被调用.

这怎么可能呢?

javascript asp.net

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

标签 统计

c# ×4

.net ×2

asp.net ×1

clr ×1

debugging ×1

javascript ×1

linq ×1

multithreading ×1

pinvoke ×1

windbg ×1