我有两个数组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) 我有一个正在运行的进程的转储文件(试图找到内存泄漏)
我注意到的一件事是,当我通过大量物体转储时!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) 我有一个静态类,可以通过多个远程访问和应用程序线程的其他内部访问.该类的部分功能是控制对各种文件的读/写访问,因此我在文件列表上实现了静态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) 我正在尝试获取当前系统文件缓存大小,如下所示.但是,当我运行此代码时,没有任何内容返回,有人可以看到我出错的地方吗?仅供参考,链接是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) 我在尝试使用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使用本地版本.
我需要计算加载页面时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完全加载后被调用.
这怎么可能呢?