我想开发一个供我个人使用的网络应用程序,我可以通过手机和计算机访问.我以为我会在途中磨练我的Python技能并使用简单的python web框架编写它.
我可以使用哪些主机来托管我的Web应用程序
我需要在我的.NET 3.5应用程序中使用Web浏览器,我不想使用默认的webbrowser(因为它感觉越来越慢).我尝试了克里斯卡瓦纳的铬,但我无法让它起作用......有没有更容易使用的替代品?我正在寻找计算机上非常简单和轻巧的东西,如果重要的话,它将主持一个网店.
更新: 5年后,需求又出现了.当时我使用Awesomium在我的程序中显示Web浏览器,tbh,我不记得它是怎么回事,但我也不记得这是一个真正的痛苦.
今天,我想再次使用它,我看到代码已经关闭,现在已经商业化了.我们尝试了,遇到了障碍,无法改变代码以我们想要的方式工作所以我们使用CEF和CefSharp进行开源路由,能够看到代码使得工作变得如此简单并且减少了伏都教(ffs,awesomium)甚至混淆了他们的代码,所以我无法理解我做错了什么.
基本上Awesomium很酷,如果你想支付2900美元并且不需要屏幕外渲染,但CEF是如此强大,能够更改代码以满足您的需求.
PS.我们给了CefGlue一个5分钟的尝试,它没有立即工作所以我们转移到CefSharp立即工作,这是两个竞争的开源框架的伟大和可怕的事情.
我目前正在阅读Accelerated C++,我意识到我并不真正了解函数签名的工作原理.
int* ptr=#
Run Code Online (Sandbox Code Playgroud)
意味着ptr现在将地址保存为num,但这意味着什么?
void DoSomething(string& str)
Run Code Online (Sandbox Code Playgroud)
从我的理解,这是一个变量的引用传递(这意味着传递地址),但当我这样做
void DoSomething(string& str)
{
string copy=str;
}
Run Code Online (Sandbox Code Playgroud)
它创造的是str的副本.我认为它会做的是引发错误,因为我正在尝试分配一个指向变量的指针.
这里发生了什么?在函数调用中使用*和&是什么意思?
我想从互联网下载的html页面中提取几个链接,我认为使用linq到XML对我的情况来说是一个很好的解决方案.
我的问题是我无法从HTML创建XmlDocument,使用Load(字符串url)不起作用所以我使用以下命令将html下载到字符串:
public static string readHTML(string url)
{
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
HttpWebResponse res = (HttpWebResponse)req.GetResponse();
StreamReader sr = new StreamReader(res.GetResponseStream());
string html = sr.ReadToEnd();
sr.Close();
return html;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用LoadXml(字符串xml)加载该字符串时,我得到了异常
'--' is an unexpected token. The expected token is '>'
Run Code Online (Sandbox Code Playgroud)
我应该采用什么方式将html文件读取为可解析的XML
在构建用于数据输入的WPF表单时(例如,一堆文本框和组合框旁边的一堆标签)我看到了两种方法:
Height="auto"为每个字段添加行,为页眉和页脚添加两行(和提交按钮),每个标签和文本框都有自己的行.您如何设计数据输入表格?我目前在两种方法之间徘徊,也许还有一种我不知道的替代方案?
编辑:Henk说我应该定义最好,我认为我同意,最好的意思是最容易维护,创建,对齐,添加或删除字段,因为需求变化.
到目前为止,网格更好的唯一标准是易于对齐.
我注意到我遇到的所有设计都可以使用actor模式进行多线程 - 将每个工作模块分成不同的actor并使用消息队列(对我来说是.NET ConcurrentQueue)来传递消息.还有哪些好的多线程模型?
我几天前开始学习vim,令人惊讶的是我感觉很自然,我也想回到学习python.我想,为什么不把两者结合起来?
所以现在我正在寻找如何建立一个合适的python开发环境,所有我的搜索都出现了其他操作系统的指南(我不能"翻译"到窗口而不觉得我错过了什么)有些人觉得他们是为以前版本的vim做的(他们假设它根本没有python支持...)
那么你如何为python开发设置vim?我看它已经有语法高亮,我该如何设置编译?我如何设置调试(如果它甚至需要,我读到某个地方,它不是python中真正需要的)?如何设置错误突出显示?或者其他我可能需要的东西?我看到一些指南设置了"转到源"链接,是否需要新版本?
我有一段代码,使用静态方法Process.GetProcessesByName(String,String)获取远程计算机上的进程列表,这可以在很多计算机上运行(几千个),我注意到它是主要的内存泄漏.
我运行了ANTS内存分析器,它告诉我大部分内存是由字符串,字符串包含诸如"%Idle Time","Processor Information"和"Cache Faults/sec"之类的存储值.我已经认识到这些字符串可能是程序中性能计数器的一部分,问题是我在程序中没有任何性能计数器.
深入挖掘发现这些字符串保存在由PerformanceCounterLib保存的哈希表中,这些哈希表由另一个哈希表保存,该哈希表存储在PerformanceCounterLib类的内部静态成员中(本身就是内部的).
深入研究兔子洞,我发现Process.GetProcesesByName使用PerformanceCounterLib来获取在远程计算机上运行的进程列表,并且对于每个远程计算机,在PerformanceCounterLib的静态内部变量中创建并引用另一个PerformanceCounterLib实例.每个实例都认为我发现的字符串散列表会堵塞我的记忆(每个都在300-700 kb之间,这意味着它会堵塞我的大对象堆).
我没有找到删除那些未使用的PerformanceCounterLib实例的方法,它们都是内部的,用户无法访问它们.
我该如何解决我的记忆问题?这真的很糟糕,我的程序在24小时内达到5GB(我的服务器限制).
编辑:添加了一段应该重现问题的代码(未经测试).为了澄清:
/// computerNames is a list of computers that you have access to
public List<string> GetProcessesOnAllComputers(List<string> computerNames)
{
var result = new List<string>();
foreach(string compName in computernames)
{
Process[] processes = Process.GetProcesses(compName); // Happens with every method that gets processes on a remote computer
string processString = processes.Aggregate(new StringBuilder(), (sb,s) => sb.Append(';').Append(s), sb => sb.ToString());
result.Add(processString);
foreach (var p in processes)
{
p.Close();
p.Dispose();
}
processes = …Run Code Online (Sandbox Code Playgroud) 我正在考虑将Rx引入我的工作场所,但我越了解它越多,我认为它并没有真正给你带来优势.
我们有很多服务器应用程序在一端获取输入数据并在另一端输出它.这对于actor模型和"无限"线程可伸缩性来说是完美的,直到现在我已经使用ConcurrentQueues来实现消息传递,我认为Rx可能是一个更好的功能性替代方案,可以使并发性更加隐含,这有助于我移动一些从命令性代码到可观察量声明的数据流决策.
但阅读它并尝试它我没有看到使用ConcurrentQueues的常规旧线程进行消息传递的优势.Rx给我的优势是什么?人们总是说尽管.NET 4.5使Rx过时(尽管是异步和数据流),但它仍然适合处理事件流.什么情况下呈现事件流以及如何识别它们?
最近我在深度阅读了C#,它教会了我关于lambda表达式的知识,我一直在使用它来将数据传递给点击事件,例如:
image.MouseDown+=(o ,e)=>MethodToDoSomething(DataNeededForAction);
Run Code Online (Sandbox Code Playgroud)
现在问题是在foreach循环中使用变量捕获(感谢Jon Skeet使这部分非常清楚:),当初始化具有我订阅的事件的几个对象时,我通常遇到变量捕获的问题.考虑以下示例:
foreach (var game in GamesCollection)
{
Image img = new Image();
img.Width = 100;
img.MouseDown+=(o,e) => MyMethod(game.id);
}
Run Code Online (Sandbox Code Playgroud)
为了避免在这种情况下捕获,我必须添加一些变量来分配游戏,然后将该变量传递给方法,这会产生额外的不清楚的代码,主要是额外的混乱.有没有办法绕过这个?什么东西至少看起来更干净?
Thx,Ziv
我正在尝试使用查询编辑器在访问数据库中为C#数据集创建查询,但创建的方法表示存在问题但未正确创建.
SELECT Discs.*
FROM Discs
WHERE (Title=@Title OR @Title IS NULL) AND
(Type=@Type OR @Type IS NULL) AND
(ContainerID=@ContainerID OR @ContainerID IS NULL) AND
NOT (@Title IS NULL AND @Type IS NULL AND @ContainerID IS NULL)
Run Code Online (Sandbox Code Playgroud)
错误是:
Generated SELECT statement.
Error in WHERE clause near '@'.
Unable to parse query text.
Run Code Online (Sandbox Code Playgroud)
生成的select方法没有任何参数且无法使用.我在访问查询中尝试了完全相同的SQL语句,它运行得很完美,在将它转移到C#时,我应该采取哪些不同的做法?
我有一个关闭屏幕ChromiumWebBrowser,我用来在页面上运行一些JS并获得结果.
Load方法是同步的,但是在引发FrameLoadEnd事件之前我无法运行JS代码,这意味着或者我的目的Load是一个以FrameLoadEnd事件结束的异步方法.
为了使我的代码更清晰,我尝试创建一个扩展方法,允许我等待页面加载await而不是注册到事件.但是当我在TaskCompletionSource中使用这个方法时,没有加载在页面加载后应该运行的javascript,但是当使用AutoResetEvent并等待它时代码确实有效.
此代码不起作用:
public static Task LoadPageAsync(this IWebBrowser browser, string address)
{
TaskCompletionSource<bool> tcs = new TaskCompletionSource<bool>();
browser.FrameLoadEnd += (sender, args) =>
{
if (args.IsMainFrame)
{
tcs.TrySetResult(true);
}
};
browser.Load(address);
return tcs.Task;
}
Run Code Online (Sandbox Code Playgroud)
这样做:
public static AutoResetEvent LoadPageAsync(this IWebBrowser browser, string address)
{
AutoResetEvent are = new AutoResetEvent(false);
browser.FrameLoadEnd += (sender, args) =>
{
if (args.IsMainFrame)
{
are.Set();
}
};
browser.Load(address);
return are;
}
Run Code Online (Sandbox Code Playgroud)
这是调用代码:
await _browser.LoadPageAsync("Some web address");
LoadScripts();
DoJsThing();
GetJsData();
Run Code Online (Sandbox Code Playgroud)
他们做同样的事情,但我觉得返回任务时函数的意图要比返回AutoResetEvent时更清楚. …
c# ×7
python ×2
wpf ×2
actor ×1
async-await ×1
browser ×1
c++ ×1
cefsharp ×1
concurrency ×1
forms ×1
grid ×1
html ×1
html-parsing ×1
ide ×1
lambda ×1
memory ×1
memory-leaks ×1
ms-access ×1
performance ×1
profiling ×1
sql ×1
stackpanel ×1
vim ×1
web-hosting ×1
webkit ×1
windows ×1
xml ×1