可能有5或6个SO帖子切向触及这个,但没有一个真正回答这个问题.
我有一个Dictionary对象,我使用一种缓存来存储值.问题是我不知道它有多大 - 随着时间的推移它可能会变得越来越大,但我无法分辨,所以我无法衡量它的有效性,或者对用户如何使用该软件做出结论.因为这是一个将在很长一段时间内投入生产并监控某些东西的部分,所以连接内存分析器或任何类似的调试都没有意义.
理想情况下,我只需在我的Timer中调用一个类似于:
private void someTimer_Tick(object sender, EventArgs e)
{
...
float mbMem = cacheMap.GetMemorySize();
RecordInLog(DateTime.Now.ToString() + ": mbMem is using " + mbMem.ToString() + "MB of memory");
...
}
Run Code Online (Sandbox Code Playgroud)
这可以在不附加某些调试工具的情况下完成,以便可以使用部署方案吗?
我有一个需要加密和解密字符串的应用程序.以下是我的解密方法:
public static string Decrypt(string cipherText)
{
try
{
//Decrypt:
byte[] keyArray;
byte[] toDecryptArray = Convert.FromBase64String(cipherText);
keyArray = UTF8Encoding.UTF8.GetBytes(key);
AesCryptoServiceProvider Aes = new AesCryptoServiceProvider();
Aes.Key = keyArray;
Aes.Mode = CipherMode.CBC;
Aes.Padding = PaddingMode.PKCS7;
Aes.IV = IV;
ICryptoTransform cTransform = Aes.CreateDecryptor();
byte[] resultArray = cTransform.TransformFinalBlock(toDecryptArray, 0, toDecryptArray.Length);
Aes.Clear();
return UTF8Encoding.UTF8.GetString(resultArray, 0, resultArray.Length);
}
catch (Exception ex)
{
return "FAILED:*" + cipherText + "*" + ex.Message;
}
}
Run Code Online (Sandbox Code Playgroud)
然而,这似乎泄漏了.如您所见,所有变量都是本地范围的,因此在完成此块时应该释放它们.作为背景,我称这种方法有时几乎是不间断的.
为了确定我有泄漏我用很多请求淹没了我的服务器.通过仔细跟踪每个请求通过每个代码路径,我确定这段代码是罪魁祸首.当在我的记忆中评论时,使用率会急剧上升,当被注释掉(并且只是返回cipherText)时,内存使用会保持平稳.
出于构造速率限制器的目的,我需要能够区分通过同一网关路由的不同用户.因此,如果我有100个具有相同IP地址的客户端,我想将它们与远程网关/主机/路由器上的相关端口区分开来.
我可以轻松获得IP:
string clientIPAddress = ((IPEndPoint)tcpClient.Client.RemoteEndPoint).Address.ToString();
Run Code Online (Sandbox Code Playgroud)
是否有类似的方法来获取客户端的远程端口号?谢谢.
我有一个如下指定的组合框:
<ComboBox Height="31" Margin="7,7,0,0" Name="callerID" IsEditable="True" Background="LightBlue" KeyDown="callerIDbar_KeyDown" Foreground="White" FontSize="17" FontWeight="Bold" HorizontalContentAlignment="Center" VerticalAlignment="Top" Grid.Row="0" Grid.Column="0" />
Run Code Online (Sandbox Code Playgroud)
storedCalls是电话号码的集合,将填充到ComboBox.Items:
foreach (string call in storedCalls)
{
if (call != "Enter a number to dial")
callerID.Items.Add(call);
}
Run Code Online (Sandbox Code Playgroud)
这一切都运行良好。我填充主项是因为我喜欢由 的集合Items中的值驱动的自动完成功能。有没有办法 XAML 禁用下拉错误并禁用下拉菜单?即制作一个简单的自动完成文本框之类的控件?ComboBoxItems
我已经看到了完整的TextBox控件,其中包括一堆代码隐藏和复杂的标记,但这不是我想要做的。我只需要禁用下拉菜单的显示功能。
我有一个ToggleButton定义如下:
<ToggleButton Name="tbPinned" Grid.Row="0" Grid.Column="3" VerticalAlignment="Bottom" HorizontalAlignment="Left" Margin="1,0,0,-5" Height="30" Width="30" IsChecked="True" Checked="tbPinned_Checked" Unchecked="tbPinned_Unchecked" >
<Image Source="/some_image.png" Stretch="Fill" />
</ToggleButton>
Run Code Online (Sandbox Code Playgroud)
但是,我只想让按钮成为图像,而不是按钮上的图像.如果我使用正常,Button我会Style="{DynamicResource NoChromeButton}"在开始ToggleButton标记中执行类似操作.但这不起作用.
我怎样才能模仿整个NoChromeButton事物ToggleButton呢?
编辑:编辑包括我如何使用常规Buttons:
<Button Style="{DynamicResource NoChromeButton}" Height="17" Margin="0,0,30,0" Name="btnMinimize" VerticalAlignment="Top" Grid.Column="1" Click="btnMinimize_Click" HorizontalAlignment="Right" Width="27" Padding="0" Visibility="Visible">
<Image Source="/some_image.png" Stretch="None" />
</Button>
Run Code Online (Sandbox Code Playgroud) 是否可以以没有任务栏图标或具有自定义图像的方式调用静态MessageBox类Show()方法?我正在尝试寻找构建自定义MessageBox类的替代方法.
谢谢.
我尝试以DefaultDesktopOnly下列方式选择该选项:
if (MessageBox.Show("Are you sure you would like to do something?", "Title", MessageBoxButtons.YesNo, MessageBoxIcon.Question, MessageBoxDefaultButton.Button1, MessageBoxOptions.DefaultDesktopOnly) == DialogResult.Yes)
{
//Do stuff
}
Run Code Online (Sandbox Code Playgroud)
但是,任务栏中仍然有一个图标,主窗体也开始崩溃.如果重要的话,我在Win7.有稳定性问题DefaultDesktopOnly吗?
背景:我有一个大规模的项目(2个ASP.NET Web应用程序,每个类似10页).这两个Web应用程序共享许多后端需求,特别是操作一组约50个表的能力.它们都是同一个RDBMS,它总是MySQL.
问题:一段时间后,项目中添加了一个功能丰富的大型ORM库(Subsonic),结果证明它太多了.它太大了,零件太多了,开销太大了.由Subsonic生成的一些集合需要> 1分钟来创建,而原始内联查询(我知道很糟糕)可以完成同样的需要~2s.这不仅仅是Subsonic的问题,NHibernate和其他ORM工具太大了,太多的功能永远不会被使用.这些项目的范围也永远不会变得很大.数据库不可知也是不必要的,因为我们永远不会从MySQL切换,除了内部,没有人会使用这个工具.
显然内联查询很糟糕,不安全,错误.Linq也不是一个选择.因此,需要一些小的自定义ORM工具供我打包在库中.我的想法是包括:
也许StackOverflow的汇集知识可以突出这个基本设置的缺点或提供改进.提前致谢.
编辑:一个约束(不确定它在这一点上是多么坚定)是我没有使用预先构建的库.亚马逊关闭了更高的产品,任何第三方实用程序都可能被拒绝.因此,与实用程序选择相比,它更像是一种架构选择.
我有一个asp.net网站,很多客户都可以使用它。我最近有一个客户切换到Win7和IE10。他告诉我,每当他尝试查看我的网站时,系统都会提示他输入兼容模式。我试图在实验室中的多个带有IE10的Win7机器上重现这一点。没运气。
所以我有几个问题:
谢谢。
我继承了一个使用Active Reports的项目.我基本上需要创建一个简单的pdf来保存我的一个ASP.NET页面上的DataGrid中的数据.
我在DataDynamics网站上只发现了一个演练,它只适用于VS2003和VS2005的用户.
我需要的报告不需要是互动的.我不需要使用Document和Page事件.我只需要在DataTable(绑定到我的网格)中获取我所拥有的内容并创建一个pdf文件,该文件可供下载.
有没有一种直接的方法来使用ActiveReports创建这个简单的静态报告?谢谢.
这可能很简单,但我不明白出了什么问题.
作为背景,我使用PreparedStatements和模板查询来提高效率.我调用setString(index,argument)来填充模板的各个部分,在填充所有字段之后,我调用execute语句.
这是一个当前事物的片段(当然它是有效的):
stmnt.setInt(1, node.getI_ID());
stmnt.setString(2, node.getTime());
stmnt.setInt(3, node.getMemoryAddress());
stmnt.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
getI_ID返回一个5位数的int数,如10014,与getMemoryAddress相同.getTime返回类似"2011-03-14_13:23:00"的日期时间.
目标是当查询最终执行该日期时间的小时但增加1时,但我不能修改从getTime返回的值这一事实,即这应该通过添加一些快速和脏的方式来完成sql代码.
这是我最初想出的:
stmnt.setInt(1, node.getI_ID());
stmnt.setString(2, node.getTime() + " interval 1 hour");
stmnt.setInt(3, node.getMemoryAddress());
stmnt.executeUpdate();
Run Code Online (Sandbox Code Playgroud)
但是,执行时,getTime的未修改值应该在我新添加的行中.当PreparedStatement将String转换为VARCHAR或DATETIME时,是否存在适用的字符串条件?或者字符串可能不包含多个令牌或其他内容?
此外,我无法在查询模板中添加"间隔1小时",因为并非所有节点都需要添加一小时.
任何帮助深表感谢.谢谢.
我想做相当于:
for (int i = 0; i < 10; i++)
{
arg[i] = arg[i].Replace("$", @"\$");
}
Run Code Online (Sandbox Code Playgroud)
在Perl.Perl会是什么样子?
我最近在.NET本机加密服务提供程序中遇到了一些内存泄漏问题,因为它依赖于非托管代码.我在SO上遇到的唯一另一件事就是这篇文章,但它没有得到太多细节,更不用说提供一个好的罪魁祸首了.
是的,如果它实现了IDisposable,它可能会在某个地方使用一些非托管资源,但是我想把一个列表放在一起,通常使用的是特定类,而不是简单地在Intellisense中查找Dispose.
我遇到的那些给我带来麻烦的是:
其他依赖非托管资源的人是谁知道的?是否有任何特别阴险的那些看起来像是完全管理但不是?提前致谢.