我能够将cntlm(请参阅其sourceforge项目)设置为我们的公司代理,浏览器通过它进行工作.http和https都有.
但是当我尝试运行时,它会发送几个初始包并挂起.结果目录大约是14kb.git clone -v https://github.com/spraints/git-tfs.git.git
相反,当我通过git直接在git中设置它时:
git config --global http.proxy http://domain\\\login:password@our-proxy-server:8088
Run Code Online (Sandbox Code Playgroud)
一切顺利.
你有什么建议吗?
或者可能是一些建议如何在不将密码放入明文配置的情况下将git连接到存储库?
[TestFixture]
public class Tests
{
private class Relay
{
public Action Do { get; set; }
}
[Test]
public void OptimizerStrangeness()
{
var relay = new Relay();
var indicator = 0;
relay.Do = () => indicator++;
var weak = new WeakReference(relay);
GC.Collect();
var relayNew = weak.Target as Relay;
if (relayNew == null) Assert.Fail();
relayNew.Do();
Assert.AreEqual(1, indicator);
}
}
Run Code Online (Sandbox Code Playgroud)
Assert.Fail()尽管事实relay变量仍在范围内,但此代码仅在行中的Release模式下失败,因此我们仍然具有对该实例的强引用,因此WeakReference必须尚未死亡.
UPD:澄清一点:我意识到它可以"优化掉".但是根据这个优化indicator变量会有0或1有价值,即我们有实际可见的行为变化.
UPD2:来自C#语言规范,第3.9节
如果对象或其任何部分无法通过任何可能的继续执行来访问,除了运行析构函数之外,该对象被认为不再使用,并且它有资格进行销毁.C#编译器和垃圾收集器可以选择分析代码以确定将来可以使用对对象的哪些引用.例如,如果范围内的局部变量是对象的唯一现有引用,但该过程中当前执行点的任何可能的继续执行中从不引用该局部变量,则垃圾收集器可能(但是不要求将对象视为不再使用.
从技术上讲,这个对象可以并且将通过继续执行来访问,因此不能被视为"不再使用"(实际上C#规范没有提及弱引用,因为它是CLR的一部分而不是编译器 - 编译器输出很好).将尝试搜索有关CLR/JIT的内存管理信息.
UPD3:以下是CLR内存管理的一些信息 - "释放内存"部分:
...每个应用程序都有一组根.每个根指向托管堆上的对象或设置为null.应用程序的根包括全局和静态对象指针,线程堆栈上的局部变量和引用对象参数以及CPU寄存器.垃圾收集器可以访问实时(JIT)编译器和运行时维护的活动根列表.使用此列表,它会检查应用程序的根,并在此过程中创建一个图形,其中包含可从根目录访问的所有对象. …
我想可靠地模拟用户输入到其他窗口。我用于SendInput此目的,但随后我需要等到目标应用程序处理输入后再发送更多内容。据我所知,SendInput尽管它的名字如此,它实际上将消息发送到队列并且不会等到它们被处理。
我的尝试是基于等待消息队列至少一次为空的想法。由于我无法直接检查其他线程的消息队列(至少我不知道一种方法),因此我使用AttachThreadInput将目标线程的队列附加到该线程的队列,然后PeekMessage进行检查。
为了检查该功能,我使用带有一个窗口和一个按钮的小型应用程序。单击按钮时,我会Thread.Sleep(15000)有效地停止消息处理,从而确保接下来的 15 秒消息队列不会为空。
代码在这里:
public static void WaitForWindowInputIdle(IntPtr hwnd)
{
var currentThreadId = GetCurrentThreadId();
var targetThreadId = GetWindowThreadProcessId(hwnd, IntPtr.Zero);
Func<bool> checkIfMessageQueueIsEmpty = () =>
{
bool queueEmpty;
bool threadsAttached = false;
try
{
threadsAttached = AttachThreadInput(targetThreadId, currentThreadId, true);
if (threadsAttached)
{
NativeMessage nm;
queueEmpty = !PeekMessage(out nm, hwnd, 0, 0, RemoveMsg.PM_NOREMOVE | RemoveMsg.PM_NOYIELD);
}
else
throw new ThreadStateException("AttachThreadInput failed.");
}
finally
{
if (threadsAttached)
AttachThreadInput(targetThreadId, currentThreadId, false);
} …Run Code Online (Sandbox Code Playgroud) 有人可以演示如何将DateTime.TryParse实现到我当前的代码中,这会占用整数.例如24小时时间格式23:00
private void textBox2_Validating(object sender, CancelEventArgs e)
{
int numberEntered;
if (int.TryParse(textBox2.Text, out numberEntered))
{
if (numberEntered < 1 || numberEntered > 28)
{
MessageBox.Show("");
textBox2.Text = 5.ToString();
}
}
else
{
MessageBox.Show("");
textBox2.Text = 5.ToString();
}
}
Run Code Online (Sandbox Code Playgroud) 如果我删除了工作目录的整个内容,那么尝试使用git checkout我收到两种不同的行为来恢复它,具体取决于我提供的命令行参数:
git checkout master
Run Code Online (Sandbox Code Playgroud)
我只收到所有已删除文件和目录的列表,但没有真正检出.
但当我这样做时:
git checkout <directory 1 in master>
git checkout <directory 2 in master>
git checkout <directory 3 in master>
git checkout <directory 4 in master>
git checkout <directory 5 in master>
git checkout <directory 6 in master>
git checkout <directory 7 in master>
Run Code Online (Sandbox Code Playgroud)
只有这样,git才能恢复缺失的东西.
这是为什么?
为什么"checkout" 在git中有两个含义?
我对C#generics相当新,我想知道一些事情是如何工作的.
如果我有这个:
public class Foo<T>
Run Code Online (Sandbox Code Playgroud)
在我的课上我有一个GetType方法,它只返回T的类型.我该怎么做才能使我的方法能够使用T.
public string GetType();
{
return T.GetType().ToString();
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试学习一个简单的例子来帮助我理解.
谢谢.