我正在写一些C++代码,错误地省略了函数的名称WSASocket
.但是,我的编译器没有引发错误并将我SOCKET
与整数值1而不是有效的套接字相关联.
有问题的代码应该是这样的:
this->listener = WSASocket(address->ai_family, address->ai_socktype, address->ai_protocol, NULL, NULL, WSA_FLAG_OVERLAPPED);
Run Code Online (Sandbox Code Playgroud)
但相反,它看起来像这样:
this->listener = (address->ai_family, address->ai_socktype, address->ai_protocol, NULL, NULL, WSA_FLAG_OVERLAPPED);
Run Code Online (Sandbox Code Playgroud)
来自其他语言,这看起来可能是某种匿名类型.该功能的名称是什么,如果它真的是一个功能?
它的目的是什么?
当你不知道从哪里开始时,很难搜索它.
此代码示例无法编译.有什么工作吗?
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication1
{
using church = Func<dynamic, dynamic, dynamic>;
class Program
{
static void Main(string[] args)
{
church True = (a, b) => a;
church False = (a, b) => b;
Func<church, church, church> And = (x, y) => x(y(True, False), False);
}
}
}
Run Code Online (Sandbox Code Playgroud)
错误6内部编译器错误(地址5476A4CC处的0xc0000005):可能的罪魁祸首是'EMITIL'.编译器中发生内部错误.若要解决此问题,请尝试简化或更改下面列出的位置附近的程序.列表顶部的位置更接近发生内部错误的位置.可以使用/ errorreport选项向Microsoft报告此类错误.TestApplication
我想将a缩放System.Drawing.Bitmap
到至少小于某个固定的宽度和高度.这是为网站上的图库创建缩略图,所以我想保持纵横比相同.
我有一些解决方案,但似乎没有一个真正做我需要的; 它们围绕着基于保持宽度或高度相同但不改变两者的缩放而展开.
一个例子:
如果我有一个4272 x 2848图像,并且我想将其缩放到1024 x 768的大小,那么生成的图像应该是1024 x 683并填充(带黑色边框)到1024 x 768.
如何处理大于所需尺寸且小于要求尺寸的图像,以及填充图像,这些图像在缩放后不会达到我需要的确切尺寸?
以下代码生成46104728的输出:
using System;
namespace TestApplication
{
internal static class Program
{
private static void Main()
{
Type type = typeof(string);
Console.WriteLine(type.GetHashCode());
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
但这样做:
using System;
namespace TestApplication
{
internal static class Program
{
private static void Main()
{
Type type = typeof(Program);
Console.WriteLine(type.GetHashCode());
Console.ReadLine();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然而,在http://ideone.com上,它会为每种类型产生不同的结果.此问题现已在多个系统上重现.我现在正在使用.NET 4.0.
今天有人向我提出一个问题,我不相信这是可能的,但我可能是错的,或者我在想它.如何在不使用C中的迭代的情况下反转数组?
我的想法是,这是不可能的,因为数组可以是任何大小的事实,没有使用某种形式的迭代,没有C程序可以用这种支持表达.
以下伪代码来自The Algorithm Design Manual的在线预览版本的第一章(本PDF第7页).
这个例子是一个有缺陷的算法,但我仍然想要理解它:
[...]一个不同的想法可能是重复连接最接近的一对端点,这些端点的连接不会产生问题,例如过早终止循环.每个顶点都以其自己的单个顶点链开始.在将所有内容合并在一起之后,我们将最终得到一个包含其中所有点的链.连接最后两个端点为我们提供了一个循环.在执行此最近对启发式过程中的任何步骤中,我们将有一组可用于合并的单顶点和顶点不相交链.在伪代码中:
ClosestPair(P)
Let n be the number of points in set P.
For i = 1 to n ? 1 do
d = ?
For each pair of endpoints (s, t) from distinct vertex chains
if dist(s, t) ? d then sm = s, tm = t, and d = dist(s, t)
Connect (sm, tm) by an edge
Connect the two endpoints by an edge
Run Code Online (Sandbox Code Playgroud)
请注意,sm
并且tm
应该s …
这导致AccessViolationException
抛出:
using System;
namespace TestApplication
{
internal static class Program
{
private static unsafe void Main()
{
ulong* addr = (ulong*)Int64.MaxValue;
ulong val = *addr;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这会导致NullReferenceException
抛出:
using System;
namespace TestApplication
{
internal static class Program
{
private static unsafe void Main()
{
ulong* addr = (ulong*)0x000000000000FF;
ulong val = *addr;
}
}
}
Run Code Online (Sandbox Code Playgroud)
它们都是无效指针,都违反了内存访问规则.为什么NullReferenceException?
对于C#和.NET的System.Net.Sockets.Socket.AcceptAsync
方法,需要处理返回值"false"以便处理SocketAsyncEventArgs
来自同步处理的连接的立即可用状态.微软提供了一些例子(在System.Net.Sockets.SocketAsyncEventArgs
类页面),如果存在大量挂起连接,则会导致堆栈溢出,这可以在任何实现其处理模型的系统上利用.
解决此问题的其他想法是创建一个调用处理程序方法的循环,其条件是值Socket.AcceptAsync
返回等于false,并且如果值指示操作则中断循环(以允许延迟处理)正在异步完成(真实).但是,此解决方案还会导致堆栈溢出漏洞,因为与SocketAsyncEventArgs
传递的关联的回调Socket.AcceptAsync
在方法结束时有一个调用Socket.AcceptAsync
,该调用还有一个用于立即可用,同步接受的连接的循环.
正如您所看到的,这是一个非常可靠的问题,我还没有找到一个不涉及System.Threading.ThreadPool
并创建大量其他方法和调度处理的好解决方案.据我所知,与之相关的异步套接字模型Socket.AcceptAsync
需要的内容要多于MSDN上的示例中所示的内容.
有没有人有一个干净有效的解决方案来处理从Socket.AcceptAsync同步接受的立即挂起的连接,而无需创建单独的线程来处理连接而不使用递归?
我对一个Navigations
名为的表的列有一个唯一约束Index
.我有两个Navigation
实体,我想交换它们的Index
值.
当我调用db.SaveChanges
它时会抛出一个异常,表明违反了一个唯一约束.似乎EF正在更新一个值然后另一个值,从而违反了约束.
它不应该在事务中更新它们,然后在值被整理并且不违反约束时尝试提交吗?
有没有办法解决这个问题而不使用临时值?
我尝试使用以下设置测试NLog性能(最新版本):
<?xml version="1.0" encoding="utf-8" ?>
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" autoReload="true">
<variable name="basePath" value="c:\logs\" />
<variable name="msgFormat" value="${message}" />
<targets async="true">
<target name="file"
xsi:type="File"
fileName="${basePath}/${logger}/${date:format=yyyy}/${date:format=MMMM}/log-${date:format=yyMMdd}-${level}.log"
layout="${msgFormat}"
concurrentWrites="true" />
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="file"/>
</rules>
</nlog>
Run Code Online (Sandbox Code Playgroud)
并运行此代码:
var msg = "this is example string for logging test. it's not very long, but not very short";
var count = 20000;
Parallel.For(0, count, x => nlog.Info(msg));
Run Code Online (Sandbox Code Playgroud)
NLog写入文件,但当文件大小达到1MB时,它将停止写入.我尝试使用简单的for
循环,但它没有帮助我.我尝试使用内部日志记录,但没有错误,顺便说一下,我看到这个字符串:
2013-04-01 11:36:18.2458跟踪打开c:\ logs/NLogTest/2013/April/log-130401-Info.log with concurrentWrite = False
这很奇怪,因为concurrentWrites默认值是true
,而且我在config中设置了这个值.
c# ×7
.net ×3
algorithm ×2
asynchronous ×1
c ×1
c++ ×1
clr ×1
crash ×1
graph-theory ×1
graphics ×1
imaging ×1
logging ×1
nlog ×1
pseudocode ×1
reflection ×1
sockets ×1