小编xxb*_*bcc的帖子

----在StringBuilder.ToString()的上下文中是什么意思?

stringbuilder.csReference Source页面ToString方法中有以下注释 :

if (chunk.m_ChunkLength > 0)
{
    // Copy these into local variables so that they 
    // are stable even in the presence of ----s (hackers might do this)
    char[] sourceArray = chunk.m_ChunkChars;
    int chunkOffset = chunk.m_ChunkOffset;
    int chunkLength = chunk.m_ChunkLength;
Run Code Online (Sandbox Code Playgroud)

这是什么意思?被----s一些恶意用户可能会插入一个字符串格式化?

.net c# clr stringbuilder reference-source

35
推荐指数
3
解决办法
2054
查看次数

不等待异步调用仍然是异步的,对吗?

抱歉,这是一个愚蠢的问题(或重复的问题)。

我有一个功能A

public async Task<int> A(/* some parameters */)
{
    var result = await SomeOtherFuncAsync(/* some other parameters */);

    return (result);
}
Run Code Online (Sandbox Code Playgroud)

我有另一个函数B,调用A但不使用返回值:

public Task B(/* some parameters */)
{
    var taskA = A(/* parameters */); // #1

    return (taskA);
}
Run Code Online (Sandbox Code Playgroud)

请注意,B没有声明async,也没有等待对的调用A。对的呼叫A不是“一劳永逸”的呼叫- B的调用方式C如下:

public async Task C()
{
    await B(/* parameters */);
}
Run Code Online (Sandbox Code Playgroud)

请注意,在#1处没有await。我有一个同事声称这使调用A同步,并且他不断Console.WriteLine提出看起来似乎证明了自己观点的日志。

我试图指出这是因为我们不等待内部结果 …

.net c# asynchronous async-await

17
推荐指数
2
解决办法
549
查看次数

精确测量线程中代码的执行时间(C#)

我试图在一些线程上尽可能准确地测量一些代码的执行时间,同时考虑上下文切换和线程停机时间.该应用程序在C#(VS 2008)中实现.例:

public void ThreadFunc ()
{
    // Some code here

    // Critical block #1 begins here
    long lTimestamp1 = Stopwatch.GetTimestamp ();

    CallComplex3rdPartyFunc (); // A

    long lTimestamp2 = Stopwatch.GetTimestamp ();
    // Critical block #1 ends here

    // Some code here

    // Critical block #2 begins here
    long lTimestamp3 = Stopwatch.GetTimestamp ();

    CallOtherComplex3rdPartyFunc (); // B

    long lTimestamp4 = Stopwatch.GetTimestamp ();
    // Critical block #2 ends here

    // Save timestamps for future analysis.
}

public int Main ( string[] sArgs …
Run Code Online (Sandbox Code Playgroud)

c# multithreading timing stopwatch

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

IntPtr与UIntPtr

这应该很简单:我看到人们都在使用IntPtr,有什么理由我应该使用UIntPtr吗?

.net c# vb.net

11
推荐指数
2
解决办法
4494
查看次数

IntPtr和UIntPtr之间的区别

RegOpenKeyEx当我在页面上注意到这条评论时,我正在查看P/Invoke声明:

更改IntPtrUIntPtr:使用IntPtr句柄调用时,您将遇到溢出.UIntPtr如果您希望在32位和64位平台上正常工作,则是正确的选择.

这并没有太大的意义对我说:都IntPtrUIntPtr应该代表指针因此其大小应与OS的位数-无论是32位或64位.由于这些不是数字而是指针,因此它们的带符号数值应该无关紧要,只有表示它们指向的地址的位.我想不出为什么这两者之间会有什么不同,但是这个评论让我不确定.

是否有使用的具体原因UIntPtr而不是IntPtr?根据文件:

IntPtr类型是符合CLS,而UIntPtr类型不是.IntPtr在公共语言运行库中仅使用该类型.UIntPtr提供的类型主要是为了保持与IntPtr类型的架构对称性.

当然,这意味着没有区别(只要有人不尝试将值转换为整数).所以pinvoke.net的上述评论是错误的吗?

编辑:

在阅读了MarkH的回答之后,我做了一些检查,发现.NET应用程序不是大地址识别,并且在32位模式下编译时只能处理2GB的虚拟地址空间.(可以使用hack打开大地址识别标志,但MarkH的答案显示.NET Framework内的检查会破坏因为地址空间仅为2GB,而不是3GB.)

这意味着指针可以拥有的所有正确的虚拟内存地址(就.NET Framework而言)将介于0x00000000和0x7FFFFFFF之间.当此范围转换为有符号时int,没有值为负值,因为未设置最高位.这强化了我的信念,即使用IntPtr与UIntPtr没有区别.我的推理是否正确?

Fermat2357指出上面的编辑是错误的.

.net c# pointers intptr

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

阻止Visual Studio编辑器重新格式化#if ... #endif

假设我在C#中有以下代码:

void Func () {
    int i=3;

    #if DEBUG
    ...
    #endif

    for (int j=0;j<i;j++) {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

如果我使用Edit->Advanced->Format document,它将重新格式化为此(使用我当前的代码格式设置):

void Func ()
{
    int i = 3;

#if DEBUG
    ...
#endif

    for ( int j = 0; j < i; j++ )
    {
        ...
    }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法防止#if#endif线移动到最左边?我找不到这些设置,但我希望有一个控制如何工作的注册表设置.

任何建议都会非常感激 - 这种行为让我发疯,因为我的代码有几百个这样的块,它们一直被VS打破.

c# visual-studio-2008 visual-studio

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

在ASP.NET Web应用程序之间传递会话数据

我正在尝试帮助一个朋友 - 他们有一个非常大的Web应用程序(ASP.NET 4.0,Visual Basic),它有许多子文件夹,都充当准子应用程序(但它们只是主应用程序的子文件夹) ).此应用程序将分为多个独立的Web应用程序,因为在当前形式下,很难进一步维护和开发.

问题是当前的单片应用程序使用了许多会话变量来处理用户信息(登录后等).我想知道是否有一种简单的方法可以在未来的多个Web应用程序之间安全地共享这些信息(显然这些应用程序具有独立性)会话).会话状态存储在SQL Server中.当前Web应用程序的用户都是外部用户,并非所有用户都可以访问所有"子应用程序".

我正在寻找关于这两件事的一些建议:

1.我已经做了一些搜索,发现单点登录 - 这似乎解决了这些应用程序的身份验证问题,但我对它不熟悉,我不明白如果"会话"如何删除身份验证信息到期,因为不同的Web应用程序将具有不同的会话.一旦会话在其中一个会话中到期,是否可以从所有Web应用程序中注销用户?

2.我怀疑(但不确定)在分割后可能需要共享的身份验证信息之上可能存在其他会话数据.什么是最好的方法(再次可靠和安全)?

我发现这篇文章关于传递ID(到保存共享数据的数据库记录),并想知道它是否好.

所有的建议将不胜感激.

PS:我在SO上发现了很多关于此事的线索,但我不相信他们中的任何一个都回答了这些具体问题.我找到的最有帮助的是这个:

在ASP.NET应用程序之间共享数据

sql-server asp.net session vb.net-2010

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

可以使用Html Agility Pack来解析HTML片段吗?

我需要LINKMETA从ASP.NET页面,用户控件和母版页元素,抓住他们的内容,然后写回更新的值在公用事业我工作的这些文件.

我可以尝试使用正则表达式来获取这些元素,但这种方法存在一些问题:

  • 我希望许多输入文件包含损坏的HTML(缺失/无序元素等)
  • SCRIPT 包含看起来像有效元素的注释和/或VBScript/JavaScript的元素等.
  • 我需要能够对特殊情况下IE有条件的意见,并METALINK元素中的IE条件注释
  • 更不用说HTML如何不是常规语言

我在.NET中对HTML解析器进行了一些研究,许多SO帖子和博客都推荐了HTML Agility Pack.我以前从未使用它,我不知道它是否可以解析破碎的HTML和HTML片段.(例如,假设一个用户控件只包含一个包含HEAD一些内容的元素 - 没有HTMLBODY.)我知道我可以阅读文档,但如果有人可以提供建议,它会节省很多时间.(大多数SO帖子都涉及解析完整的HTML页面.)

.net html c# parsing html-agility-pack

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

指针指针与指针指针(C++)之间的区别

我有一些使用接口指针的COM代码.代码的原作者实现了返回接口指针的函数,如下所示:

HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject* &pEnumerator ); // (1)
Run Code Online (Sandbox Code Playgroud)

而不是传统的

HRESULT Query ( IN BSTR sQuery, OUT IEnumWbemClassObject** ppEnumerator ); // (2)
Run Code Online (Sandbox Code Playgroud)

函数(1)被调用如下:

hRes = Query ( sQuery, pEnumerator ); // (3)
Run Code Online (Sandbox Code Playgroud)

这肯定看起来不对,但它工作正常.我不确定我是否只是拿起这一行,因为out参数不是指向输出变量的指针,或者因为这种方法有问题.

使用引用指针而不是指针指向输出参数是否有优势?

c++ com pointers out

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

如何安排N个矩形覆盖最小面积

可能重复:
以相当优化的方式打包矩形所需的算法

我有N个矩形,每个都是随机大小(随机宽度和高度).所有矩形都与X和Y轴平行.我正在寻找一种算法,帮助我并排排列这些矩形,使得生成的边界矩形具有最小面积,并且输入矩形周围/之间的潜在间隙尽可能小.矩形不能旋转,可能不会相互重叠.

(我需要这些来自动化游戏精灵的排列,这样我就可以创建精灵表并从动画师的各种图像中保存精灵位置.)

例如:

+---+   +----------+
| 1 |   |    2     |
+---+   +----------+                 +----------+..           +---+----------+
                                     |    2     |..           | 1 |    2     |
+--------+                ===>       +--------+-+-+    vs     +---+----+-----+
|        |                           |        | 1 |           |        |......
|    3   |                           |    3   +---+           |    3   |......
+--------+                           +--------+....           +--------+......

                                       Unused: 8                 Unused: 18
Run Code Online (Sandbox Code Playgroud)

未使用的空间由图中的点(.)标记.由于第一个结果具有带有较小未使用空间的边界矩形,因此最好找到输入矩形的这种排列.

是否有一种算法可以帮助解决这个问题?我做了很多谷歌搜索,但大多数结果与找到最小边界矩形或找到N个矩形覆盖预定区域有关.

algorithm math rectangles area

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