有没有办法捕获First-Chance异常,并记录它们而不在调试器下运行?
我想另一种问这个问题的方法是,我可以编写一些东西,它会像调试器一样附加到我的进程中,看看它发生了什么问题吗?
我试图弄清楚 MSIL 如何能够通过仅存储一个整数来表示对静态函数的调用。
例如,如果您添加对 Interlocked.Increment(ref someVariable) 的调用,您的 IL 将包含以下内容:
0x28 | 0x12、0x0、0x0、0xA
管道运算符是我的补充,本质上 0x28 是调用指令,而 012, 0x0, 0x0, 0xA 是“Interlocked.Increment”方法。
谁决定了这个价值?当您使用 ildasm 进行反汇编时,它会很好地打印名称,但是否有它查找的表?
这个表是在哪里定义的?
public T Foo<T, U>(U thing) where T : new()
{
return new T();
}
Run Code Online (Sandbox Code Playgroud)
当没有new()约束时,我理解它是如何工作的.JIT编译器看到T,如果它是引用类型,则使用代码的对象版本,并专门针对每个值类型的情况.
如果你有一个新的T(),它是如何工作的?它在哪里寻找?
我有一个程序,我认为它在.NET 4.0中运行,但我无法进行混合模式调试(对于64位应用程序,新的.net 4.0)
我想确认我是否真的在.NET 4.0中运行,或者它是否运行.NET 3.5
有没有办法查看内存空间或其他什么?
string.Format("{0}, {1}, {2}", var1, var2, var3)
Run Code Online (Sandbox Code Playgroud)
我想对var1,var2和var3中的每一个应用URL编码.它不是一个数组,所以我不能使用Linq Aggregate来完成它.
有任何想法吗?
我不想在每个变量周围加上括号.
public interface Event
{
Guid identifier;
Timestamp ts;
}
Run Code Online (Sandbox Code Playgroud)
我们正在考虑使用Reactive Extensions来重写我的金融公司的问题.
前提是我们通过Guid(股票代码+嵌入其中的唯一性熵),时间戳和值字段来识别事件.它们的速度很快,我们不能在X秒(10秒)后"至少"之前对这些物体采取行动,之后我们必须对它们采取行动,然后将它们从系统中移除.
想想它就像两个窗口,一个"10秒"的初始窗口(例如T0到T10),我们在那里识别所有独特的事件(基本上是guid组),然后我们查看下一个"10秒","辅助窗口"(T10-T20),以确保我们实施"至少"10秒的政策.从"初始窗口",我们删除所有事件(因为我们已经考虑了它们),然后从"辅助窗口"中删除"初始窗口"中发生的事件.我们继续移动10秒推拉窗,所以现在我们正在看窗口T20-T30,重复并冲洗.
我怎么能在Rx中实现它,因为它似乎是要走的路.
for (int i = 0; i < X; i++)
myitem = (checkedDB) ? dirtyItem : cleanItem;
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种在同一语句中翻转checkedDB的方法,即下一次迭代checkedDB与它的值相反,所以就像XORing一样.
所以我最近做了一些工作,当有人告诉我,如果在Stream.Read网络流上做一个通过调用.NET GetResponseStream上的一个WebResponse或者那些被缓冲的.
他说如果你要在你正在阅读的代码中设置一个断点,你就不会停止网络流量.我发现这很奇怪,但也希望这是真的.这是如何运作的?它甚至准确吗?
using (Stream webResponseStream = this.webResponse.GetResponseStream())
{
byte[] readBuffer = new byte[bufferSize];
int bytesRead = webResponseStream.Read(readBuffer, 0, bufferSize);
while (bytesRead > 0)
{
bytesRead = webResponseStream.Read(readBuffer, 0, bufferSize);
// If I put a breakpoint here, does network activity stop?
}
}
Run Code Online (Sandbox Code Playgroud) 如果我有如下功能:
bool MyFunc(char **outMessage)
{
}
Run Code Online (Sandbox Code Playgroud)
这里有什么期望?调用者是否会分配缓冲区并传递给被调用方?但那么如果被调用者超过缓冲区怎么办?
要明确你没有大小或任何其他参数,这是函数定义.你怎么看?
或者我错了吗?这是被调用者分配的缓冲区?但如果它是被调用者分配的缓冲区,我该如何处理缓冲区呢?注意:没有功能可以处理库提供的功能.
编辑:这是一个真实的场景,取自这里 - > http://llvm.org/docs/doxygen/html/Analysis_2Analysis_8cpp_source.html#l00078
我最近被介绍了向量指令(理论上)并且对如何使用它们来加速我的应用程序感到兴奋。
我想改进的一个方面是一个非常热的循环:
__declspec(noinline) void pleaseVectorize(int* arr, int* someGlobalArray, int* output)
{
for (int i = 0; i < 16; ++i)
{
auto someIndex = arr[i];
output[i] = someGlobalArray[someIndex];
}
for (int i = 0; i < 16; ++i)
{
if (output[i] == 1)
{
return i;
}
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
但是,当然,所有 3 个主要编译器(msvc、gcc、clang)都拒绝对此进行矢量化。我可以理解为什么,但我想得到确认。
如果我必须手动矢量化它,它将是:
(1) VectorLoad "arr", 这带来了 16 个 4 字节整数,让我们说到 zmm0
(2) 16个内存从zmm0[0..3]指向的地址加载到zmm1[0..3],从zmm0[4..7]指向的地址加载到zmm1[4..7]所以等等
(3)比较zmm0和zmm1
(4) 向量 popcnt 到输出中找出最高有效位并基本上除以 8 得到匹配的索引
首先,向量指令可以做这些事情吗?就像他们可以执行这种“收集”操作,即从指向 zmm0 的地址加载?
以下是 clang 生成的内容:
0000000000400530 …Run Code Online (Sandbox Code Playgroud)