stringbuilder.cs的Reference 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一些恶意用户可能会插入一个字符串格式化?
抱歉,这是一个愚蠢的问题(或重复的问题)。
我有一个功能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提出看起来似乎证明了自己观点的日志。
我试图指出这是因为我们不等待内部结果 …
我试图在一些线程上尽可能准确地测量一些代码的执行时间,同时考虑上下文切换和线程停机时间.该应用程序在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) RegOpenKeyEx当我在页面上注意到这条评论时,我正在查看P/Invoke声明:
更改
IntPtr为UIntPtr:使用IntPtr句柄调用时,您将遇到溢出.UIntPtr如果您希望在32位和64位平台上正常工作,则是正确的选择.
这并没有太大的意义对我说:都IntPtr和UIntPtr应该代表指针因此其大小应与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指出上面的编辑是错误的.
假设我在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打破.
我正在尝试帮助一个朋友 - 他们有一个非常大的Web应用程序(ASP.NET 4.0,Visual Basic),它有许多子文件夹,都充当准子应用程序(但它们只是主应用程序的子文件夹) ).此应用程序将分为多个独立的Web应用程序,因为在当前形式下,很难进一步维护和开发.
问题是当前的单片应用程序使用了许多会话变量来处理用户信息(登录后等).我想知道是否有一种简单的方法可以在未来的多个Web应用程序之间安全地共享这些信息(显然这些应用程序具有独立性)会话).会话状态存储在SQL Server中.当前Web应用程序的用户都是外部用户,并非所有用户都可以访问所有"子应用程序".
我正在寻找关于这两件事的一些建议:
1.我已经做了一些搜索,发现单点登录 - 这似乎解决了这些应用程序的身份验证问题,但我对它不熟悉,我不明白如果"会话"如何删除身份验证信息到期,因为不同的Web应用程序将具有不同的会话.一旦会话在其中一个会话中到期,是否可以从所有Web应用程序中注销用户?
2.我怀疑(但不确定)在分割后可能需要共享的身份验证信息之上可能存在其他会话数据.什么是最好的方法(再次可靠和安全)?
我发现这篇文章关于传递ID(到保存共享数据的数据库记录),并想知道它是否好.
所有的建议将不胜感激.
PS:我在SO上发现了很多关于此事的线索,但我不相信他们中的任何一个都回答了这些具体问题.我找到的最有帮助的是这个:
我需要LINK和META从ASP.NET页面,用户控件和母版页元素,抓住他们的内容,然后写回更新的值在公用事业我工作的这些文件.
我可以尝试使用正则表达式来获取这些元素,但这种方法存在一些问题:
SCRIPT 包含看起来像有效元素的注释和/或VBScript/JavaScript的元素等.META和LINK元素中的IE条件注释我在.NET中对HTML解析器进行了一些研究,许多SO帖子和博客都推荐了HTML Agility Pack.我以前从未使用它,我不知道它是否可以解析破碎的HTML和HTML片段.(例如,假设一个用户控件只包含一个包含HEAD一些内容的元素 - 没有HTML或BODY.)我知道我可以阅读文档,但如果有人可以提供建议,它会节省很多时间.(大多数SO帖子都涉及解析完整的HTML页面.)
我有一些使用接口指针的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参数不是指向输出变量的指针,或者因为这种方法有问题.
使用引用指针而不是指针指向输出参数是否有优势?
可能重复:
以相当优化的方式打包矩形所需的算法
我有N个矩形,每个都是随机大小(随机宽度和高度).所有矩形都与X和Y轴平行.我正在寻找一种算法,帮助我并排排列这些矩形,使得生成的边界矩形具有最小面积,并且输入矩形周围/之间的潜在间隙尽可能小.矩形不能旋转,可能不会相互重叠.
(我需要这些来自动化游戏精灵的排列,这样我就可以创建精灵表并从动画师的各种图像中保存精灵位置.)
例如:
+---+ +----------+
| 1 | | 2 |
+---+ +----------+ +----------+.. +---+----------+
| 2 |.. | 1 | 2 |
+--------+ ===> +--------+-+-+ vs +---+----+-----+
| | | | 1 | | |......
| 3 | | 3 +---+ | 3 |......
+--------+ +--------+.... +--------+......
Unused: 8 Unused: 18
Run Code Online (Sandbox Code Playgroud)
未使用的空间由图中的点(.)标记.由于第一个结果具有带有较小未使用空间的边界矩形,因此最好找到输入矩形的这种排列.
是否有一种算法可以帮助解决这个问题?我做了很多谷歌搜索,但大多数结果与找到最小边界矩形或找到N个矩形覆盖预定区域有关.
c# ×7
.net ×5
pointers ×2
algorithm ×1
area ×1
asp.net ×1
async-await ×1
asynchronous ×1
c++ ×1
clr ×1
com ×1
html ×1
intptr ×1
math ×1
out ×1
parsing ×1
rectangles ×1
session ×1
sql-server ×1
stopwatch ×1
timing ×1
vb.net ×1
vb.net-2010 ×1